MyBatis와 Spring을 함께 사용할 때는 MyBatis의 데이터베이스 설정 일부는 생략하고 스프링에 그 설정을 추가한다.
즉, 스프링을 사용하면 스프링 설정이 마이바티스 설정의 일부를 대체하는 것이다.
MyBatis 설정에서 설정 가능한 element를 파악하기 위한 가장 간단한 방법은 DTD를 보는 것이다.
설정파일의 DTD는 http://mybatis.org/dtd/mybatis-3-config.dtd 에서 확인할 수 있다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
매퍼 XML의 DTD는 다음과 같다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
1. dataSource
dataSource 아이디를 가진 bean은 데이터베이스 연결정보를 가진 객체이다.
MyBatis와 Spring을 연동하면 데이터베이스 설정과 트랜잭션 처리는 Spring에서 관리한다.
dataSource bean은 트랜잭션을 관리하는 bean에서 사용한다.
(1)Oracle
- driverClassName : oracle.jdbc.driver.OracleDriver
- (JDBC) url : jdbc:oracle:thin:@[서버주소]:[포트]:[데이터베이스명]
(2)MySQL
- driverClassName : com.mysql.jdbc.Driver
- (JDBC) url : jdbc:mysql://[서버주소]:[포트]/[데이터베이스명]
(3)PostgreSQL
- driverClassName : org.postgresql.Driver
- (JDBC) url : jdbc:postgresql://[서버주소]:[포트]/[데이터베이스명]
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destory-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:[서버주소]:[포트]:[데이터베이스명]" />
<property name="username" value="아이디" />
<property name="password" value="비밀번호" />
<bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destory-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://[서버주소]:[포트]/[데이터베이스명]" />
<property name="username" value="아이디" />
<property name="password" value="비밀번호" />
<bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
<property name="driverClass" value="org.postgresql.Driver" />
<property name="url" value="$jdbc:postgresql://[서버주소]:[포트]/[데이터베이스명]" />
<property name="username" value="아이디" />
<property name="password" value="비밀번호" />
<bean>
2. transactionManager
transactionManager 아이디를 가진 bean은 트랜잭션을 관리하는 객체다.
MyBatis는 JDBC를 그대로 사용하기 때문에 DataSourceTransactionManager 타입의 빈을 사용한다.
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<tx:advice id="txAdvisor" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="update*" rollback-for="Exeption" />
<tx:method name="delete*" rollback-for="Exeption" />
<tx:method name="insert*" rollback-for="Exeption" />
</tx:attributes>
</tx:advice>
3. tx:annotation-driven
Annotation을 사용하여 트랜잭션 사용시 활성화
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
4. aop
jp(프로젝트명)에 있는 모든 controller, service, dao에 트랜잭션을 사용하도록 설정한다.
<aop:config proxy-target-class="true">
<aop:pointcut
expression="execution(* jp..controller.*Controller.*(..)) or execution(* jp..service.*Impl.*(..)) or execution(* jp..dao.*DAO.*(..))"
id="serviceOperation" />
<aop:advisor id="transactionAdvisor" advice-ref="txAdvisor"
pointcut-ref="serviceOperation" />
</aop:config>
5. SqlSessionFactoryBean
SqlSessionFactoryBean은 팩토리 패턴을 사용한다.
SqlSessionFactory를 생성하기 위한 FactoryBean 설정이다.
이 bean을 사용해서 Spring은 SqlSessionFactory 객체를 한번만 생성한다.
그리고 MyBatis를 사용할 때마다 SqlSessionFactory를 이용해서 MyBatis 객체를 매번 생성한다.
MyBatis와 Spring을 연동하기 위해서는 반드시 사용해야 한다.
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:mapper/**/*_Sql.xml" />
</bean>
6. SqlSessionTemplate
SqlSessionTemplate은 MyBatis SqlSession과 같은 역할을 담당하지만 트랜잭션을 처리하는 방법에서 약간의 차이점이 있다. SqlSessionTemplate은 Spring이 트랜잭션을 대신 처리하도록 되어 있기 때문에 commit/rollback 메소드를 호출할 수 없다.
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSession"/>
</bean>
7. log
<bean id="dataSource" class="net.sf.log4jdbc.Log4jdbcProxyDataSource">
<constructor-arg ref="dataSourceSpied" />
<property name="logFormatter">
<bean class="net.sf.log4jdbc.tools.Log4JdbcCustomFormatter">
<property name="loggingType" value="MULTI_LINE" />
<property name="sqlPrefix" value="SQL : " />
</bean>
</property>
</bean>
'DataBase > MyBatis' 카테고리의 다른 글
[MyBatis] 동적 SQL (0) | 2019.05.24 |
---|---|
[MyBatis] MyBatis란? (0) | 2019.05.22 |
댓글