티스토리 뷰
저번에 받을 라이브러리는 다 받았다. 이제 스프링 설정파일을 건드려보자.
기본적으로 여기쓰는 내용은 아래의 사이트에 기초해 쓰고 있으며, 따로 또 읽어보시길 권한다.
첫번째로 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>
Spring 관련글
[Spring] Spring Tool Suite(STS) 2.9.2 release 설치 및 예제 프로젝트 생성
[Spring] STS 예제 프로젝트에 기본으로 있는 파일들에 대해서
[Spring - MyBatis - MySQL] 1. mybatis-spring.jar 다운 및 버전 주의사항
[Spring - MyBatis - MySQL] 2. 스프링 설정파일 예제 및 설명
[Spring - MyBatis - MySQL] 3. 간단한 sql 조회 예제
[Spring - MyBatis - MySQL] 4. 트랜잭션(Transaction)에서 커밋(commit)과 롤백(rollback) 사용하기
- Total
- Today
- Yesterday
- 도넛차트
- SVN
- 이클립스
- docker
- 맥북
- 셀프개통
- 마인크래프트
- 알뜰요금제
- 아이맥
- MyBatis
- ggplot2
- ggplot
- Oracle
- github
- Spring
- java
- ubuntu
- 막대그래프
- ktm모바일
- MySQL
- R
- heroku
- ipTIME
- Google Chart Tools
- 자급제폰
- javascript
- python
- vagrant
- MongoDB
- eclipse
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |