티스토리 뷰

저번에 받을 라이브러리는 다 받았다. 이제 스프링 설정파일을 건드려보자.

기본적으로 여기쓰는 내용은 아래의 사이트에 기초해 쓰고 있으며, 따로 또 읽어보시길 권한다.

 

http://www.mybatis.org/spring

 

 

첫번째로 DataSource를 정의해야한다. 스프링 설정파일(app-config.xml)을 열어서 다음 소스를 추가하자.

<bean id="dataSource" class="org.apache.ibatis.datasource.pooled.PooledDataSource">
	<property name="driver" value="com.mysql.jdbc.Driver" />
	<property name="url" value="jdbc:mysql://localhost/world" />
	<property name="username" value="root" />
	<property name="password" value="비밀번호 넣으세요." />
</bean>

자.. 여기서 고민해야할건 현재 기술환경에서 데이터커넥션 객체들을 누가 관리하고 있는가 이다. WAS 가 하고 있는가? 혹은 EJB 컨테이너? 기타 다른 데이터풀관리 시스템..? 아니면 아직 정해지지 않았는지..? 스프링 자체에서는 데이터커넥션 풀 관리를 해주는 API를 제공하지 않는다. 그러므로 자신에 맞는 환경을 찾는게 중요하며, 여기서는 웹 기반이 아닌 간단한 예제 프로그램을 구현하는 것이고, 또 기왕 MyBatis ORM 프레임워크를 쓰니.. MyBatis에서 제공하는 커넥션풀 기반의 DataSource를 사용하자. PooledDataSource 클래스를 사용하면 커넥션 풀을 제어할 더 많은 property 를 사용할 수 있다. MyBatis관련 pdf 에 잘나와 있으므로 확인하면 될듯 하다.

 

 

 

두번째로 SqlSessionFactoryBean 을 정의한다. 스프링 설정파일(app-config.xml)을 열어서 다음 소스를 추가하자.

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	<property name="dataSource" ref="dataSource" />
	<property name="configLocation" value="classpath:/META-INF/mybatis/mybatis-config.xml"/>
</bean>

SqlSessionFactoryBean 안에 앞서 정의했던 DataSource 를 매핑한다. 그리고 여기다 매퍼파일들을 바로 연결할 수도 있지만.. 그러면 여기 xml 파일이 쓸데 없이 길어질게 뻔하니.. mybatis-config.xml 파일을 하나 만들어 거기다가 Mapper xml 파일을 정의하기로 한다. 그래서 여기에서는 configLocation 속성에다 mybatis-config.xml 파일만 연결시켜준다. mybatis-config.xml 파일을 아직 만들지 않았어도 우선 저렇게 선언해주자. 곧 만들꺼니까.

 

 

 

세번째로 TransactionManager 를 정의한다. 스프링 설정파일(app-config.xml)을 열어서 다음 소스를 추가하자.

<bean id="transactionManager" 
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	<property name="dataSource" ref="dataSource"/>
</bean>

mybatis-spring.jar 가 하는 가장 중요한 일이 스프링 트랜젝션에 MyBatis를 연결하고 연동하게 하는 역할 이다. 일단 transactionManager를 선언하는 것만으로 스프링의 방식으로 트랜젝션 제어를 할 수 있게 한다. 이렇게 트랜젝션을 스프링이 관리하기 시작하면 MyBatis의 SqlSession 클래스에 있는 commit(), rollback(), close() 메소드를 사용할 수 없다. 사용할 수 없다는 의미는 이 메소드들을 사용하면 UnsupportedOperationException 예외가 발생한다. 그리고 또 유의해야할 점은..  자신의 JDBC 커넥션의 autoCommit 셋팅과는 상관없이 무조건 자동커밋처리 된다.


만약에 트랜젝션을 프로그램 상에서 커밋 및 롤백 메소드를 사용해 제어하고 싶으면, PlatformTransactionManager 를 사용해서 제어하라고 나와 있다. ([Spring - MyBatis - MySQL] 4. 트랜잭션(Transaction) 예제 를 참고하세요.)

 

 

 

네번째로 SqlSessionTemplate 을 정의한다. 스프링 설정파일(app-config.xml)을 열어서 다음 소스를 추가하자.

<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
	<constructor-arg index="0" ref="sqlSessionFactory" />
</bean>

이게 왜 필요한가에 대해 좀 의문이었는데.. 사이트에 설명해놓은 걸 보니 나름 배려를 많이 했다는 생각이 든다. 이제껏 우리는 SqlSessionFactory 객체를 통해 SqlSession 객체를 가져왔다. 그리고 SqlSession 객체로 sql 문 실행하고 commit 하고 rollback 하다가 필요없어지면 close 했다. 근데 mybatis-spring.jar 를 사용하면서 스프링의 트랜젝션 기술을 사용하면서 SqlSessionFactory 객체를 직접 사용할 필요가 없어졌다. 그럼 SqlSession 객체는 어떻게 얻을 수 있는 걸까. 그래서 mybatis-spring.jar 에서 제공하는 클래스가 SqlSessionTemplate 이다. 심지어 이 SqlSessionTemplate 클래스를 The heart of MyBatis-Spring 이라고 까지 소개하고 있다. 어쨋든 위 소스를 추가하면 SqlSession 객체를 얻는 것은 훨신더 간편해지게 된다. SqlSessionTemplate 객체는 SqlSessionFactory 객체를 생성자를 통해 가지고 있어야 하므로 설정파일에 잘 넣어준다.

 

 

다섯번째로 MyBatis 설정파일(mybatis-config.xml)과 매퍼파일(SampleMapper.xml)을 만들자.

 

 

위와같이 mybatis 폴더를 하나 추가한다음에 그 폴더에 2개 xml 파일을 생성하자.

 

mybatis 설정파일에는 아래와 같이 넣어주자.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<mappers>
		<mapper resource="META-INF/mybatis/SampleMapper.xml"/>
	</mappers>
</configuration>


매퍼파일(SampleMapper.xml)에도 아래와 같이 넣어주자. 우선 테스트때 해볼 2개의 sql 문을 넣었다

<?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">

<mapper namespace="SqlSampleMapper">
 
	<select id="selectSample" parameterType="java.util.HashMap"
			resultType="java.util.HashMap">
		select *
		from world.country
		where code = #{code}
	</select>

	<insert id="insertTable01" parameterType="java.util.HashMap">
		insert into spring_test.table01
		(aaa, bbb) values ( #{aaa}, #{bbb} )
	</insert>

</mapper>





반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함