본문 바로가기
DataBase/MyBatis

[MyBatis] Spring의 데이터베이스 관련 설정

by 김뚱 2019. 5. 23.

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>
728x90
반응형

'DataBase > MyBatis' 카테고리의 다른 글

[MyBatis] 동적 SQL  (0) 2019.05.24
[MyBatis] MyBatis란?  (0) 2019.05.22

댓글