Spring

02-1. ORM : MyBatis 연동하기 (MyBatis, Connection Pool, ojdbc6) [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의 최종목적

클래스 <-> 클래스 통신을 한다.

클래스와 클래스가 서로 안다 -> 강한 결합

클래스와 클래스가 서로 모른다 -> 약한 결합



반응형