-
02-1. ORM : MyBatis 연동하기 (MyBatis, Connection Pool, ojdbc6) [Spring]Spring 2016. 11. 1. 16:55반응형
설정하기
Depandencies에서
commons-dbcp 추가
ojdbc6 추가 (.xml에서 직접 작성)
porn.xml에서
<!-- Connection Pool 지원하는 라이브러리 -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
</dependencies>
<!-- Oracle Repoitory 등록 Ojdbc6.jar 를 가져오기 위해서 등록함. -->
<repositories>
<repository>
<id>oracle</id>
<name>ORACLE JDBC Repository</name>
<url>http://maven.jahia.org/maven2</url>
</repository>
</repositories>
<!-- Oracle DB에 접근하기 위한 Ojdbc6 라이브러리 -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.1.0.7.0</version>
</dependency>
rootContext.xml에서
<!-- DriverManager.getConnection()을 대체할 객체 -->
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:XE" />
<property name="username" value="HR" />
<property name="password" value="HR" />
</bean>
web.xml에서
(Ctrl + Space 눌러서 ContextLoaderListener 선택)
<!-- needed for ContextLoaderListener -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/*Context.xml
</param-value>
</context-param>
MyBatis Dependency 추가하기
porn.xml -> Depandencies 에서 add버튼 클릭후 추가
mybatis-spring
mybatis
spring-jdbc
aspectjweaver
rootContext.xml에서
<bean id="sqlSessionFactory"
class="org.mybatis.spring.SqlSessionFactoryBean" >
<property name="dataSource" ref="dataSource" />
</bean>
<!-- DaoSupport 역할 -->
<bean id="sqlSessionTemplate"
class="org.mybatis.spring.SqlSessionTemplate">
<!-- 생성자 -->
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
<bean에 적는 value=""는 Primitive 타입이다
<bean에 적는 ref="" 레퍼런스 타입일때
<bean의 id=변수명 class=타입
<property>는 setter이다
<constructor-arg>는 생성자 이다
rootContext.xml 에서
트랜잭션
실패시 : RollBack
성공시 : Commit
<!-- Transaction 설정 -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- Transaction 수행 Method 설정 -->
<tx:advice id="txAdvice"
transaction-manager="transactionManager">
<tx:attributes>
<!-- Insert -->
<tx:method name="add*" rollback-for="RuntimeException"/>
<tx:method name="new*" rollback-for="RuntimeException"/>
<tx:method name="append*" rollback-for="RuntimeException"/>
<tx:method name="insert*" rollback-for="RuntimeException"/>
<tx:method name="regist*" rollback-for="RuntimeException"/>
<tx:method name="put*" rollback-for="RuntimeException"/>
<!-- Update -->
<tx:method name="update*" rollback-for="RuntimeException"/>
<tx:method name="modify*" rollback-for="RuntimeException"/>
<tx:method name="replace*" rollback-for="RuntimeException"/>
<tx:method name="replace*" rollback-for="RuntimeException"/>
<tx:method name="fix*" rollback-for="RuntimeException"/>
<tx:method name="plus*" rollback-for="RuntimeException"/>
<tx:method name="minus*" rollback-for="RuntimeException"/>
<!-- Delete -->
<tx:method name="delete*" rollback-for="RuntimeException"/>
<tx:method name="remove*" rollback-for="RuntimeException"/>
<tx:method name="detach*" rollback-for="RuntimeException"/>
<tx:method name="drop*" rollback-for="RuntimeException"/>
<!-- Select -->
<tx:method name="select*" read-only="true"/>
<tx:method name="get*" read-only="true"/>
<!-- 공통 -->
<tx:method name="tx*" rollback-for="RuntimeException"/>
</tx:attributes>
</tx:advice>
rootContext -> Namespaces -> aop, tx 체크하기
<!-- Transaction 이 적용될 업무 담당 경계 설정 -->
<aop:config>
<!-- 업무 경계 설정 -->
<!-- expression : 업무 경계 설정 Format -->
<aop:pointcut expression="execution( public * com.ktds..service.*Impl.*(..) )" id=""/>
com.ktds 이하의 service안에 Impl에 있는 모든 (메소드)들
<!-- Transaction 실행 범위 지정 및 모니터링 시작 설정 -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="servicePublicMethod" />
</aop:config>
src/main/java 에서
패키지 -> Dao, Biz, Service를 만들어주고 각각 Impl을 만들어준다.
DaoImpld 에서는
extends SqlSessionDaoSupport 를 사용한다.
사용법
public String getNowDateTime() {
return getSqlSession().selectOne("IndexDao.getNowDateTime");
}
DI의 최종목적
클래스 <-> 클래스 통신을 한다.
클래스와 클래스가 서로 안다 -> 강한 결합
클래스와 클래스가 서로 모른다 -> 약한 결합
반응형'Spring' 카테고리의 다른 글
03. 커맨드 객체 값 검증과 에러 메시지, Interceptor [Spring] (0) 2016.11.03 02-3. ORM : MyBatis (Parameter 받기) [Spring] (0) 2016.11.02 Invalid LOC Header 오류 해결법 (0) 2016.11.02 02-2. ORM : MyBatis 연동하기 (Mapper, Configration ) [Spring] (0) 2016.11.02 01. Spring 설정하기 [Spring] (0) 2016.11.01