이전에는 ibatis를 사용하였지만 최근 mybatis로 바뀌었고 교체되어 나가고 있습니다

신규 프로젝트는 mybatis로 시작하는 것을 권장합니다.


이 문서는 기초 세팅하는 방법만 설명되어 있습니다.

자세한 설명은 전문 서적을 참고하시거나 아래의 공식 블로그를 참조해주세요.

mybatis 공식 블로그 ( 도움 많이 됩니다 )


라이브러리 설정

커넥션풀을 사용하는 MYSQL을 기준으로  하여 설명을 진행하겠다.


아래의 라이브러리들이 모두 포함되어 있는지 확인한다.


  1. <properties>
  2.     <spring-version>3.2.2.RELEASE</spring-version>
  3.     <log4j-version>1.2.17</log4j-version>
  4.     <mysql-version>5.1.9</mysql-version>
  5. </properties>
  6.  
  7. <repositories>
  8.     <repository>
  9.         <id>springsource-repo</id>
  10.         <name>SpringSource Repository</name>
  11.         <url>http://repo.springsource.org/release</url>
  12.     </repository>
  13. </repositories>
  14.  
  15. <dependencies>
  16.     <!-- 스프링 웹 프레임워크 -->
  17.     <dependency>
  18.         <groupId>org.springframework</groupId>
  19.         <artifactId>spring-webmvc</artifactId>
  20.         <version>${spring-version}</version>
  21.     </dependency>
  22.  
  23.     <!-- 서블릿 설정 -->
  24.     <dependency>
  25.         <groupId>javax.servlet</groupId>
  26.         <artifactId>servlet-api</artifactId>
  27.         <scope>provided</scope>
  28.         <version>2.5</version>
  29.     </dependency>
  30.     <dependency>
  31.         <groupId>javax.servlet.jsp</groupId>
  32.         <artifactId>jsp-api</artifactId>
  33.         <scope>provided</scope>
  34.         <version>2.1</version>
  35.     </dependency>
  36.  
  37.     <!-- 로깅 설정 -->
  38.     <dependency>
  39.         <groupId>log4j</groupId>
  40.         <artifactId>log4j</artifactId>
  41.         <version>${log4j-version}</version>
  42.     </dependency>
  43.  
  44.     <!-- 스프링 DBMS -->
  45.     <dependency>
  46.         <groupId>org.springframework</groupId>
  47.         <artifactId>spring-tx</artifactId>
  48.         <version>${spring-version}</version>
  49.     </dependency>
  50.     <dependency>
  51.         <groupId>org.springframework</groupId>
  52.         <artifactId>spring-jdbc</artifactId>
  53.         <version>${spring-version}</version>
  54.     </dependency>
  55.     <dependency>
  56.         <groupId>org.springframework</groupId>
  57.         <artifactId>spring-orm</artifactId>
  58.         <version>${spring-version}</version>
  59.     </dependency>
  60.     <dependency>
  61.         <groupId>org.springframework</groupId>
  62.         <artifactId>spring-aop</artifactId>
  63.         <version>${spring-version}</version>
  64.     </dependency>
  65.  
  66.     <!-- MySQL 설정 -->
  67.     <dependency>
  68.         <groupId>mysql</groupId>
  69.         <artifactId>mysql-connector-java</artifactId>
  70.         <version>${mysql-version}</version>
  71.     </dependency>
  72.  
  73.     <!-- 커낵션 풀 -->
  74.     <dependency>
  75.         <groupId>commons-dbcp</groupId>
  76.         <artifactId>commons-dbcp</artifactId>
  77.         <version>1.4</version>
  78.     </dependency>
  79.  
  80.     <!-- mybatis 설정 -->
  81.     <dependency>
  82.         <groupId>org.mybatis</groupId>
  83.         <artifactId>mybatis</artifactId>
  84.         <version>3.2.2</version>
  85.     </dependency>
  86.     <dependency>
  87.         <groupId>org.mybatis</groupId>
  88.         <artifactId>mybatis-spring</artifactId>
  89.         <version>1.2.0</version>
  90.     </dependency>
  91. </dependencies>


 

web.xml

spring/ibatis-context.xml을 추가한다.

이 안에서 mybatis의 스프링 설정이 모두 이루어진다.


  1. <!-- application-context를 등록하는 전역 리스너 -->
  2. <listener>
  3.     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  4. </listener>
  5. <context-param>
  6.     <param-name>contextConfigLocation</param-name>
  7.     <param-value>
  8.         classpath:spring/application-context.xml
  9.         classpath:spring/mybatis-context.xml
  10.     </param-value>
  11. </context-param>


mybatis-context.xml

 mybatis에 대한 스프링의 모든 설정을 구성한다.

 좀 복잡하지만, 천천히 주욱 읽어보시길 권한다.


  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3.     <!-- 데이터베이스 풀 설정 -->
  4.     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
  5.         <property name="driverClassName" value="${jdbc.driverClassName}" ></property>
  6.         <property name="url" value="${jdbc.url}"></property>
  7.         <property name="username" value="${jdbc.username}"></property>
  8.         <property name="password" value="${jdbc.password}"></property>
  9.         <property name="initialSize" value="${jdbc.initialSize}"></property>
  10.         <property name="maxActive" value="${jdbc.maxActive}"></property>
  11.         <property name="minIdle" value="${jdbc.minIdle}"></property>
  12.        
  13.        
  14.         <!-- validationQuery:유효 검사용 쿼리( 1개 이상의 row를 반환하는 쿼리를 넣어주면 된다. ) -->
  15.         <property name="validationQuery" value="select 1" />
  16.         <!-- testWhileIdle:컨넥션이 놀고 있을때 -_-; validationQuery 를 이용해서 유효성 검사를 할지 여부. -->
  17.         <property name="testWhileIdle" value="true" />
  18.         <!-- timeBetweenEvictionRunsMillis:해당 밀리초마다 validationQuery 를 이용하여 유효성 검사 진행 -->
  19.         <property name="timeBetweenEvictionRunsMillis" value="7200000" />
  20.     </bean>
  21.  
  22.     <!-- mybatis 설정 -->
  23.     <bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
  24.         <!-- 데이터소스 연결 -->
  25.         <property name="dataSource" ref="dataSource" />
  26.         <!-- 설정 연결 -->
  27.         <property name="configLocation" value="classpath:/mybatis/config.xml"></property>
  28.         <!-- 매퍼 연결 -->
  29.         <property name="mapperLocations" value="classpath:/mybatis/mapper/*.xml" />
  30.     </bean>
  31.    
  32.     <!-- 트랜젝션 매니저 -->
  33.     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  34.         <property name="basePackage" value="Mapper 파일이 정의되어 있는 패키지 경로" />
  35.     </bean>
  36.    
  37.     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  38.         <property name="dataSource" ref="dataSource"></property>
  39.     </bean>
  40.    
  41.     <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
  42. </beans>
  43.  



database.properties

DBCP 환경설정이 들어있다.

뭐 데이터베이스 많이 해보신분은 딱 보면 척 아실듯

 jdbc.driverClassName=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/데이터베이스명

jdbc.username=계정

jdbc.password=암호

jdbc.initialSize=3

jdbc.maxActive=10

jdbc.minIdle=3

 


스프링 mybatis의 연동핵심인 sqlSession 빈에서 mybatis 설정파일들(config, mapper)를 연결한다.

이것에 대한 설명은 말했다시피 전문서적이나 공식홈페이지에서 확인하시길 바란다.


config.xml

mybatis 전역 설정 및 Type 별칭을 구성한다.

매핑과 같은 경우 스프링에서 연결하고 있으므로 이 파일에서 매핑할 필요없다.

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE configuration
  3.     PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4. <configuration>
  5.     <settings>
  6.         <setting name="cacheEnabled" value="false" />
  7.         <setting name="useGeneratedKeys" value="true" />
  8.         <setting name="defaultExecutorType" value="REUSE" />
  9.     </settings>
  10.     <typeAliases>
  11.         <typeAlias alias="Test" type="com.shadowbug.spring.info.TestInfo"></typeAlias>
  12.     </typeAliases>
  13. </configuration>


mapping.xml

테이블에 대한 매핑정보를 선언한다.

직관적이라서 왠만한것은 다 이해할 거라 믿으며, 이해가 안되시는 부분은 전문서적이나, 블로그 홈페이지를 확인하시길 바란다.

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper
  3.     PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. <mapper namespace="com.shadowbug.spring.info.TestInfo">
  5.  
  6.     <resultMap type="Test" id="TestResult">
  7.         <id property="id" column="id"/>
  8.         <result property="value" column="value"/>
  9.     </resultMap>
  10.  
  11.     <select id="getPerson" parameterType="Integer" resultMap="TestResult">
  12.         SELECT
  13.         *
  14.         FROM
  15.         test
  16.         WHERE
  17.         id=#{id}
  18.     </select>
  19.  
  20.     <insert id="add" parameterType="Test"> <!-- useGeneratedKeys="true" keyProperty="id"> -->
  21.         INSERT INTO
  22.         test(id, value)
  23.         VALUES
  24.         (0, #{value})
  25.     </insert>
  26.     
  27.  
  28.     ...
  29. </mapper>




1. TestDao ( SqlSession 방식 )

전통적인 Dao 구현방식이다. Dao내부에서 SqlSession을 이용해서 SQL을 처리한다.

 

  1. public class TestDao {
  2.  
  3.     private static final String VO = TestInfo.class.getName();
  4.    
  5.     @Autowired
  6.     private SqlSession session;
  7.    
  8.     @Transactional(readOnly=false)
  9.     public void add(final TestInfo testInfo) {
  10.         session.insert(VO + ".add", testInfo);
  11.     }
  12. }


2. TestDao ( 프록시 방식  )

다른 개발자들은 어떤방식을 사용하는지 모르겠지만 개인적으로 많이 사용하는 방식이다.

인터페이스에서 엑세스 포인트를 설정하고, mapper에서 쿼리를 정의하고 있다.


함수 이름이 mapper의 아이디를 의미한다.


내부적으로 트랜젝션 처리가 되어있으므로, 

인터페이스에서 @Transactional은 정의 안해도 되므로 굳이 하려고 노력하지는 말자.


나머지 자세한 내용은 마이바티스 공식문서 및 책을 참조하시기를 ....

  1. public interface UserDao {
  2.  
  3.     public UserInfo login(@Param("id") final String id, @Param("password") final String password);
  4.    
  5.     public UserInfo get(@Param("id") final long userId);
  6.  
  7.         .....
  8. }


사용할 땐 인터페이스를 주입받으면 된다

  1. @Service
  2. @Transactional(readOnly=true)
  3. public class UserService {
  4.  
  5.     @Autowired
  6.     private UserDao userDao;
  7.  
  8.         ....
  9. }
  10.  


+ Recent posts