반응형

지금 Spring 3.0에서 4.0으로 버전 업그레이드를 하면서, IBatis도 MyBatis로 변경하고 있다. 그래서, 작업한 내용을 기록한다.

 

1. Maven Project로 변경하기

- 기존 프로젝트는 Maven 프로젝트가 아니라서, Maven 프로젝트로 변경했다. Maven 프로젝트로 변경 후에, 필요한 라이브러리들을 맞췄다.

2022.11.08 - [IT/이클립스(Eclipse)] - [이클립스/Eclipse] 이클립스(Eclipse) 자바 프로젝트 Maven 프로젝트로 변경하는 방법

 

[이클립스/Eclipse] 이클립스(Eclipse) 자바 프로젝트 Maven 프로젝트로 변경하는 방법

기존에 사용했던 프로젝트가 pom.xml이 없어서 dependency 추가도 어렵고 관리를 하기도 힘들었다. 그래서, 이 기회에 자바 프로젝트를 Maven 프로젝트로 변환을 해서 pom.xml을 생성하고 라이브러리 관

yongku.tistory.com

 

2. pom.xml에서 dependency 변경하기

기존 프로젝트는 라이브러리를 pom.xml에서 관리를 안하고, 따로 라이브러리를 프로젝트에 추가하여 파일로 관리를 했다. 그래서, 이것을 걷어내고 pom.xml로 관리를 하기 위해 위와 같이 Maven Project로 변경을 했다. 이제 pom.xml에서 mybatis에 필요한 dependency를 추가한다.

 

아래와 같이, mybatis 라이브러리, mybatis-spring 2개의 dependency를 넣어준다.

<dependencies>
	<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis</artifactId>
		<version>3.5.2</version>
	</dependency>

	<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis-spring</artifactId>
		<version>2.0.2</version>
	</dependency>
</dependencies>

 

3. IBatis와 관련된 라이브러리 날리기

MyBatis로 변경하면서 IBatis가 있으면 충돌나기 마련이다. 그래서, 디렉토리에서 IBatis 관련된 라이브러리 파일들을 다 삭제했다. 그러면 에러가 짱짱하게 많이 나온다. 이제부터 시작이다.

 

4. context.xml 수정하기

sqlMapClient를 sqlSession으로 변경하면 된다. 이와 관련하여 class도 바꿔야 한다.

 

1) IBatis

IBatis를 사용할 때는 아래와 같이 되어 있다. 여기서 FactoryBean과 Template의 class를 IBatis에서 사용하던 것을 MyBatis로 변경해야 한다

 

i) FactoryBean

- org.springframework.orm.ibatis.SqlMapClientFactoryBean

- org.mybatis.spring.SqlSessionFactoryBean

 

ii) Template

- org.springframework.orm.ibatis.SqlMapClientTemplate

- org.mybatis.spring.SqlSessionTemplate

 

2) config.xml 파일 수정하기

IBatis와 MyBatis의 가장 큰 차이점이 바로 config.xml이다. IBatis에서는 xml을 생성하면, config.xml에 하나씩 다 등록을 해줘야 한다. 하지만, MyBatis에서는 경로를 설정하여 자동으로 등록을 해준다. 그래서 변경 후의 context.xml을 보면 configLocation에서 mybatis의 config.xml을 가져오고, 각 mapper들의 로케이션을 다 스캔해서 가져온다. 그 코드가 바로 변경 후 코드의 list 태그로 감싸진 곳이다.

 

아래와 같이, 아래 경로에 있는 모든 xml을 가져 온다.

<list>
	<value>classpath:/mybatis/${jdbc.db}/common/*.xml</value>
	<value>classpath:/mybatis/${jdbc.db}/common/**/*.xml</value>
	<value>classpath:/mybatis/${jdbc.db}/common/**/**/*.xml</value>
</list>

 

* 변경 전

<?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-3.0.xsd">

	<bean id="BMSqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
		<property name="configLocation" value="/WEB-INF/conf/spring/ibatis/sqlmap-BM-config.xml"/>
		<property name="dataSource" ref="BMDataSource"/>
		<property name="lobHandler" ref="oracleLobhandler"/>
	</bean>
	
	<bean id="BMSqlMapClientTemplate" class="org.springframework.orm.ibatis.SqlMapClientTemplate">
		<property name="sqlMapClient" ref="BMSqlMapClient" />
	</bean>
</beans>

 

* 변경 후

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:tx="http://www.springframework.org/schema/tx" 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="sqlSessionFactoryBM" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="BMDataSource"/>
		<property name="mapperLocations">
			<list>
				<value>classpath:/mybatis/${jdbc.db}/common/*.xml</value>
				<value>classpath:/mybatis/${jdbc.db}/common/**/*.xml</value>
				<value>classpath:/mybatis/${jdbc.db}/common/**/**/*.xml</value>
			</list>
		</property>
		<property name="configLocation" value="/WEB-INF/conf/mybatis/mybatis-config.xml"/>
	</bean>
	
	<bean id="sqlSessionBMTemplate" class="org.mybatis.spring.SqlSessionTemplate">
		<constructor-arg ref="sqlSessionFactoryBM" />
		<constructor-arg index="1" value="REUSE" />
	</bean>
</beans>

 

5. datasource.xml 수정하기

datasource.xml에서 수정할 것은 거의 없다. 아래와 같이, spring-beans와 tx 버전을 3.0에서 4.0으로 변경하면 된다.

 

* 변경 전

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/tx
	   http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

 

* 변경 후

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
       http://www.springframework.org/schema/tx
	   http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">

 

6. DAO 수정하기

아래와 같이, 이제 IBatis에서 쓰는 것들을 MyBatis에 맞게 Autowired를 해야 한다. 저 SqlMapClient는 IBatis에서 사용하는 것이기 때문에, MyBatis에 맞게 바꿔주면 된다.

	@Autowired
	@Qualifier("sqlSessionBM")
	SqlMapClient sqlMapClient;
	
	@Autowired
	@Qualifier("sqlSessionBMTemplate")
	SqlMapClientTemplate sqlMapClientTemplate;
	
	@Autowired
	@Qualifier("sqlSessionBM")
	SqlMapClientFactoryBean sqlMapClientFactoryBean;

 

7. java 파일 수정하기

기존의 sqlMapClient를 SqlSession으로 바꿔주고, dataSource bean 주입한다.

@Autowired
@Qualifier("DataSource")
DataSource dataSource;
	
@Autowired
@Qualifier("sqlSessionTemplate")
private SqlSessionTemplate sqlSession;

2022년 11월 17일 초안 작성

반응형

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

MyBatis statementType의 CALLABLE이란?  (0) 2022.01.17
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기