Spring Framework & MyBatis_ 스프링프레임워크 & 마이바티스
☆ 무.료 강의자료 제공 中 ★
♡ 좋아요! 하고 더많은 자료 받아보세요 :) :) :) :) !!!!
[ 제 3장 ] _ Spring AOP((Spring Aspect Oriented Programming)
[ 목 차 ]
4. Spring JDBC
4.1 기존 JAVA JDBC와 Spring JDBC의 비교
4.2 Spring JDBC에서 DataSource 취득하는 방
4.3 Spring JDBC에서 DB 접근하는 방법
4.3.1 Spring JDBC에서 DB 접근하는 방법 – jdbcTemplate
4.3.1.1 Maven, Gradle에서 오라클 설
4.3.1.2 마리아DB 및 HeidiSQL 설
4.3.1.3 간단한 Spring JDBC jdbcTemplate 예제
4.3.1.4 Spring JDBC 내부 콜(PreparedStatementCreator, PreparedStatementSetter)
4.3.1.5 jdbcTemplate의 execute 메소드
[#더많은자료, #꿀강의, #꿀강좌, #구로오라클학원 #탑크리에듀]
http://www.topcredu.co.kr/
2. CONTENTS
4. Spring JDBC
4.1 기존 JAVA JDBC와 Spring JDBC의 비교
4.2 Spring JDBC에서 DataSource 취득하는 방법
4.3 Spring JDBC에서 DB 접근하는 방법
4.3.1 Spring JDBC에서 DB 접근하는 방법 – jdbcTemplate
4.3.1.1 Maven, Gradle에서 오라클 설정
4.3.1.2 마리아DB 및 HeidiSQL 설치
4.3.1.3 간단한 Spring JDBC jdbcTemplate 예제
4.3.1.4 Spring JDBC 내부 콜백(PreparedStatementCreator, PreparedStatementSetter)
4.3.1.5 jdbcTemplate의 execute 메소드
4. 4. Spring JDBC
4-1. 기존 JAVA JDBC와 Spring JDBC의 비교
Spring의 DAO 프레임워크에서는 Connection 객체를 DataSource를 통해서 취득하며 Connection객체를 프로그래머가
직접 다루지 않는다.
스프링은 데이터 접근 프로세스에 있어서 고정된 부분과 가변적인 부분을 명확히 분류하는데 고정적인 부분은 템플릿
(template)이며, 가변적인 부분은 콜백(callback)이다.
템플릿은 프로세스의 고정적인 부분(트랜잭션 관리, 자원관리, 예외처리)을 관리하며 콜백(질의문 생성, 파라미터 바인딩,
결과집합 마샬링)은 구체적인 구현을 넣어야 하는 장소이다. 프로그래머는 콜백부분만 구현하면 된다.
5. 4. Spring JDBC
4-1. 기존 JAVA JDBC와 Spring JDBC의 비교
기존 JDBC를 이용하여 퍼시스턴스 계층을 구현할 때 문제점
퍼시스턴스 계층은 Connection 생성, PreparedStatement 생성, SQLException 처리와 같이 중복적으로 구현해야 하는 소스 코드가 너무 많다.
Spring 프레임워크는 JDBC를 추상화한 API를 새롭게 제공하고 있는데 이것이 Spring JDBC이다. Spring JDBC는 기존의
JDBC를 추상화하고 있는 만큼 지금까지 개발자들이 직접 구현해 왔던 Connection 생성, PreparedStatement 생성,
SQLException 처리와 같은 반복적인 작업들을 프레임워크가 담당하고 있다.
Spring의 DAO 프레임워크가 던지는 모든 예외는 DataAccessException 이다. SQLException이나 HibernateException등
과 같은 특정 기술에 의존적인 예외를 던지지 않는다.
데이터 접근 인터페이스가 구현에 의존적인 예외가 아닌 스프링의 일반적인 예외를 던짐으로써 특정한 퍼시스턴스 구현
에 결합되는 일이 없다(loose coupling).
DataAccessException은 반드시 직접 처리할 필요는 없다. RuntimeException이기 때문에 Uncheck Exception에 속한다.
Checked Exception 이 과도한 catch나 throws 절을 야기시켜 코드가 난잡하게 만들수 있다.
Unchecked Exception이 발생하는 경우는 대부분 복구가 불가능한 것이므로 직접 처리할 필요는 없다. 비지니스 로직을
수행하는 중 발생하는 비즈니스 로직 오류는 Checked Exception으로 처리하고 그렇지 않으면 Unchecked Exception으
로 처리하면 된다.
6. 4. Spring JDBC
4-2. Spring JDBC에서 DataSource 취득하는 방법
DriverManagerDataSource 클래스 이용
- 자바 소스에서
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(“oracle.jdbc.driver.OracleDriver”);
dataSource.setUrl(“jdbc:oracle:thin:@localhost:1521:onj”);
dataSource.setUsername(“scott”);
dataSource.setPassword(“tiger”);
- 설정파일에서
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
7. 4. Spring JDBC
4-2. Spring JDBC에서 DataSource 취득하는 방법
DBCP 이용
common-dbcp.jar, commons-pool.jar 파일이 클래스패스에 필요하다.
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<context:property-placeholder location="jdbc.properties"/>
8. 4. Spring JDBC
4-2. Spring JDBC에서 DataSource 취득하는 방법
JNDI 이용
[context.xml]
<?xml version=”1.0″ encoding=”UTF-8″?>
<Context>
<Resource name=”jdbc/onjdb”
auth=”Container”
type=”javax.sql.DataSource”
driverClassName=”oracle.jdbc.OracleDriver”
url=”jdbc:oracle:thin:@localhost:1521:onj”
username=”scott”
password=”tiger”
maxActive=”20″
maxIdle=”10″
maxWait=”-1″
/>
</Context>
[빈 정의 XML]
<bean id=”dataSource” class=”org.springframework.jndi.JndiObjectFactoryBean”>
<property name=”jndiName” value=”java.comp/env/jdbc/onjdb”/>
</bean>
9. 4. Spring JDBC
4-3. Spring JDBC에서 DataSource 취득하는 방법
JdbcTemplate : 전형적인 Spring JDBC 접근법으로 SQL을 실행하며 자주 사용된다.
NamedParameterJdbcTemplate : 전형적인 JDBC의 ?(Placeholder) 대신에 이름있는 바인딩 파라미터를 제공하기 위한 것이다.
SimpleJdbcTemplate : JdbcTemplate + NamedParameterJdbcTemplate
SimpleJdbcInsert : 최소한의 구성으로 Insert가 가능하도록 지원하며 DataSource를 가진 클래스를 인스턴스한 직후
withTableName 메소드를 불러 테이블 이름을 지정해야 한다.
SimpleJdbcCall : 최소한의 설정으로 데이터베이스 내에 저장된 저장 프로시저, 함수 등을 호출하도록 지원한다.
SqlUpdate : 재사용 가능한 SQL DML(insert, update, dalete) 구문을 생성한다.
StoredProcedure : RDB의 저장 프로시저에 대한 추상 수퍼 클래스, 다양한 execute 메소드를 제공한다.
10. 4. Spring JDBC
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-1. Spring JDBC에서 DB 접근하는 방법 – jdbcTemplate
모든 형태의 SQL 구문을 실행해
서 원하는 결과 타입을 반환한다.
스프링의 모든 데이터 접근 프레
임워크는 템플릿 클래스를 포함
하는데 이 경우 템플릿 클래스는
JdbcTemplate 클래스이다.
JdbcTemplate 클래스가 작업하
기 위해 필요한 것은 DataSource
이며 스프링의 모든 DAO 템플릿
클래스는 스레드에 안전하기 때
문에 애플리케이션 내의 각각
의 DataSource에 대해서 하나의
JdbcTemplate 인스턴스만을 필
요로 한다.
public class StudentDao {
private JdbcTemplate jdbcTemplate;
public void setJdbcTeamplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}//:
}///~
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
</bean>
<bean id=“studentDao"
class="oraclejava.training.jdbc.StudentDao">
<property name="jdbcTemplate">
<ref bean="jdbcTemplate"/>
</property>
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" >
<property name="driverClassName“><value>oracle.jdbc.driver.OracleDriver</value></property>
<property name="url“><value>jdbc:oracle:thin:@192.168.0.27:1521:onj</value></property>
<property name="username“><value>scott</value></property>
<property name="password“><value>tiger</value></property>
</bean>
11. 4. Spring JDBC
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-1. Spring JDBC에서 DB 접근하는 방법 – jdbcTemplate
4-3-1-1 Maven, Gradle에서 오라클 설정
그래들 설정
1. 메이븐 로컬 레포지터리에 오라클 JDBC Driver 설치를 위한 메이븐을 설치하자.
https://maven.apache.org/download.cgi 에서 binary zip 파일을 다운받자.
(apache-maven-3.3.3-bin.zip)
2. 적당히 압축을 풀자. (cjava 아래)
압축을 출고 bin 폴더를 환경변수에서 path에 추가하자.
(C:java3apache-maven-3.3.3bin)
3. Oracle JDBC Driver를 다운받자.
http://www.oracle.com/technetwork/apps-tech/jdbc-112010-090769.html
(오라클 11g용 ojdbc6.jar)
4. 다운받은 폴더에서 CMD로 도스창을 띄운 후 아래 명령을 실행하여 로컬 메이븐
레포지터리에 저장하자.
mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc6 -
Dversion=11.2.0.4 -Dpackaging=jar -Dfile=ojdbc6.jar -DgeneratePom=true
5. build.grdle을 작성
apply plugin : 'java'
apply plugin : 'application'
mainClassName = "onj.edu.jdbc.JdbcClient"
dependencies {
compile 'org.springframework:spring-context:4.2.4.RELEASE'
compile 'org.springframework:spring-jdbc:4.2.4.RELEASE'
runtime 'commons-dbcp:commons-dbcp:1.2.2'
runtime 'com.oracle:ojdbc6:11.2.0.4'
}
repositories {
mavenCentral()
mavenLocal()
}
메이븐 설정
<dependencies>
……
<!-- DBCP -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.2.2</version>
</dependency>
<!-- ORACLE -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.1.0.7.0</version>
</dependency>
……
</dependencies>
<repositories>
<repository>
<id>oracle</id>
<name>ORACLE JDBCRepository</name>
<url>http://maven.jahia.org/maven2</url>
</repository>
</repositories>
12. 4. Spring JDBC
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-1. Spring JDBC에서 DB 접근하는 방법 – jdbcTemplate
4-3-1-2 마리아DB 및 HeidiSQL 설치
1. https//download.mariadb.org에 접속 후 “Download 10.1.10 Stable Now!”를 클릭
13. 4. Spring JDBC
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-1. Spring JDBC에서 DB 접근하는 방법 – jdbcTemplate
4-3-1-2 마리아DB 및 HeidiSQL 설치
2. 자신의 환경에 맞는 파일을 다운로드 한다.
14. 4. Spring JDBC
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-1. Spring JDBC에서 DB 접근하는 방법 – jdbcTemplate
4-3-1-2 마리아DB 및 HeidiSQL 설치
3. 적당한 경로에 압축을 풀고 bin 폴더로 가서 인스톨 하자.(관리자 권한으로 CMD 실행할 것, datadir :
DB설치경로, service : 서비스이름, password : root 비밀번호)
압축푼경로bin>mysql_install_db --datadir=DB설치경로 --service=MySQL --password=1111
Running bootstrap
2016-05-02 9:45:28 7540 [Note] D:dev-ecommercemariadb-10.1.10-winx64binmysq
ld.exe (mysqld 10.1.10-MariaDB) starting as process 7568 ...
Removing default user
Setting root password
Creating my.ini file
Registering service 'MySQL'
Creation of the database was successfull
15. 4. Spring JDBC
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-1. Spring JDBC에서 DB 접근하는 방법 – jdbcTemplate
4-3-1-2 마리아DB 및 HeidiSQL 설치
4. 원도우 서비스에 보면 MySQL 이라는 서비스가 떠 있을 것이다.
16. 4. Spring JDBC
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-1. Spring JDBC에서 DB 접근하는 방법 – jdbcTemplate
4-3-1-2 마리아DB 및 HeidiSQL 설치
5. 한글 사용을 위해 DB설치경로 아래 my.ini 파일을 열어 수정하자.
[mysqld]
datadir= DB설치경로
[client]
default-character-set = utf8
[mysqld]
init_connect = SET collation_connection = utf8_general_ci
init_connect = SET NAMES utf8
character-set-server = utf8
collation-server = utf8_general_ci
[mysqldump]
default-character-set = utf8
[mysql]
default-character-set = utf8
6. MySQL 서비스 시작
압축푼경로bin>sc start MySQL
17. 4. Spring JDBC
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-1. Spring JDBC에서 DB 접근하는 방법 – jdbcTemplate
4-3-1-2 마리아DB 및 HeidiSQL 설치
7. DB에 접속해서 데이터 등을 확인하기 위해 클라이언트도 설치하자.
http://www.heidisql.com/download.php에 접속하여 HeidiSQL을 설치하자.
18. 4. Spring JDBC
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-1. Spring JDBC에서 DB 접근하는 방법 – jdbcTemplate
4-3-1-2 마리아DB 및 HeidiSQL 설치
8. 설치파일을 실행하면 HeidiSQL이 설치되며 실행한 후 신규 버튼을 클릭 후 root비번(“1111”)을 입력하면 접속된다.
19. 4. Spring JDBC
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-1. Spring JDBC에서 DB 접근하는 방법 – jdbcTemplate
4-3-1-3 간단한 Spring JDBC jdbcTemplate 예제
마리아DB에서 EMP 테이블의 데이터를 Spring JDBC의 JdbcTemplate을 이용하여 화면에 출력하는 간단한 예제를
작성해 보자.
STS에서
File -> New -> Project -> Spring Legacy
Project
Project name : jdbc1
Simple Spring Maven 선택
Finish 클릭
[마리아DB 및 데이터소스 사용을 위해 pom.xml에 다음 의존성을 추가]
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring-framework.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
20. 4. Spring JDBC
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-1. Spring JDBC에서 DB 접근하는 방법 – jdbcTemplate
4-3-1-3 간단한 Spring JDBC jdbcTemplate 예제
[EmpDao.java]
package jdbc;
import java.util.List;
import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate;
public class EmpDao {
private DataSource dataSource;
private JdbcTemplate jdbcTemplate;
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
List getNames() {
String sql = "select * from emp";
return jdbcTemplate.queryForList(sql);
}
}
21. 4. Spring JDBC
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-1. Spring JDBC에서 DB 접근하는 방법 – jdbcTemplate
4-3-1-3 간단한 Spring JDBC jdbcTemplate 예제
[src/main/resources/app-jdbc.xml]
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="EmpDao" class="jdbc.EmpDao">
<property name="dataSource">
<ref bean="dataSource" />
</property>
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://localhost/jdbc1</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>1111</value>
</property>
</bean>
</beans>
22. 4. Spring JDBC
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-1. Spring JDBC에서 DB 접근하는 방법 – jdbcTemplate
4-3-1-3 간단한 Spring JDBC jdbcTemplate 예제
[JdbcClient.java]
package jdbc;
import org.springframework.context.support.GenericXmlApplicationContext;
import org.springframework.core.io.FileSystemResource;
public class JdbcClient {
public static void main(String[] args) {
GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();
ctx.load("app-jdbc.xml");
ctx.refresh();
EmpDao e = (EmpDao)ctx.getBean("EmpDao");
System.out.println(e.getNames());
ctx.close();
}
}
23. 4. Spring JDBC
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-1. Spring JDBC에서 DB 접근하는 방법 – jdbcTemplate
4-3-1-4 Spring JDBC 내부 콜백(PreparedStatementCreator, PreparedStatementSetter)
PreparedStatementCreator
//이 인터페이스는 다음과 같은 하나의 메소드를 제공한다.
public PreparedStatement createPreparedStatement(Connection con) throws SQLException;
//JdbcTemplate이 아래 클래스를 호출할 때 실행된 SQL로그를 남긴다.
//SqlProvider는 getSql() 이라는 메소드를 제공, SQL문자열을 JdbcTemplate에서 사용가능하도록 제공한다.
public class InsertPersonStatementCreator implements PreparedStatementCreator, SqlProvider
{
private String sql = “INSERT INTO ( id, firstname, lastname) VALUES ( ? , ? ?)”;
public PreparedStatement createPreparedStatement(Connection con) ..
return con.preparedStatement(sql);
}//:
public String getSql() { return sql; }
}
24. 4. Spring JDBC
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-1. Spring JDBC에서 DB 접근하는 방법 – jdbcTemplate
4-3-1-4 Spring JDBC 내부 콜백(PreparedStatementCreator, PreparedStatementSetter)
PreparedStatementSetter
//이 인터페이스는 SQL 파라미터를 Setting하는 메소드를 제공한다.
void setValues(PreparedStatement ps) throws SQLException;
private Person person;
public void setVales(PreparedStatement ps) throws SQLException {
ps.setInt (1, person.getId().intValue());
ps.setString (2, person.getFirstName());
ps.setString (3, person.getLastName());
}
…
25. 4. Spring JDBC
4-3. Spring JDBC에서 DataSource 취득하는 방법
4-3-1. Spring JDBC에서 DB 접근하는 방법 – jdbcTemplate
4-3-1-5 jdbcTemplate의 execute 메소드
대개 SQL문자열로 부터 PreparedStatement를 생성하고 파라미터를 바인딩 하는 작업을 많이 하므로
JdbcTemplate은 execute 메소드를 제공한다.
주로 DDL 처리용으로 아래와 같은 경우 백그라운드에서 JdbcTemplate이 PreparedStatement와
PreparedStatementSetter를 생성 시킨다.
public int insertPerson(Person person) {
String sql = “insert into person (id, firstname, lastname) values (?,?,?)”;
Object[] params = new Object[] {
person.getId(),
person.getFirstName(),
person.getLastName()
};
return jdbcTemplate.execute(sql, params);
}
26. Any Questions ?
THANK YOU
FOR YOUR ATTENTION
무료국비지원교육 / 구로자바학원 _ 탑크리에듀 교육센터
http://www.topcredu.co.kr