이전에는 ibatis를 사용하였지만 최근 mybatis로 바뀌었고 교체되어 나가고 있습니다
신규 프로젝트는 mybatis로 시작하는 것을 권장합니다.
이 문서는 기초 세팅하는 방법만 설명되어 있습니다.
자세한 설명은 전문 서적을 참고하시거나 아래의 공식 블로그를 참조해주세요.
mybatis 공식 블로그 ( 도움 많이 됩니다 )
라이브러리 설정
커넥션풀을 사용하는 MYSQL을 기준으로 하여 설명을 진행하겠다.
아래의 라이브러리들이 모두 포함되어 있는지 확인한다.
- <properties>
- <spring-version>3.2.2.RELEASE</spring-version>
- <log4j-version>1.2.17</log4j-version>
- <mysql-version>5.1.9</mysql-version>
- </properties>
- <repositories>
- <repository>
- <id>springsource-repo</id>
- <name>SpringSource Repository</name>
- </repository>
- </repositories>
- <dependencies>
- <!-- 스프링 웹 프레임워크 -->
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-webmvc</artifactId>
- <version>${spring-version}</version>
- </dependency>
- <!-- 서블릿 설정 -->
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>servlet-api</artifactId>
- <scope>provided</scope>
- <version>2.5</version>
- </dependency>
- <dependency>
- <groupId>javax.servlet.jsp</groupId>
- <artifactId>jsp-api</artifactId>
- <scope>provided</scope>
- <version>2.1</version>
- </dependency>
- <!-- 로깅 설정 -->
- <dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- <version>${log4j-version}</version>
- </dependency>
- <!-- 스프링 DBMS -->
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-tx</artifactId>
- <version>${spring-version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-jdbc</artifactId>
- <version>${spring-version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-orm</artifactId>
- <version>${spring-version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-aop</artifactId>
- <version>${spring-version}</version>
- </dependency>
- <!-- MySQL 설정 -->
- <dependency>
- <groupId>mysql</groupId>
- <artifactId>mysql-connector-java</artifactId>
- <version>${mysql-version}</version>
- </dependency>
- <!-- 커낵션 풀 -->
- <dependency>
- <groupId>commons-dbcp</groupId>
- <artifactId>commons-dbcp</artifactId>
- <version>1.4</version>
- </dependency>
- <!-- mybatis 설정 -->
- <dependency>
- <groupId>org.mybatis</groupId>
- <artifactId>mybatis</artifactId>
- <version>3.2.2</version>
- </dependency>
- <dependency>
- <groupId>org.mybatis</groupId>
- <artifactId>mybatis-spring</artifactId>
- <version>1.2.0</version>
- </dependency>
- </dependencies>
web.xml
spring/ibatis-context.xml을 추가한다.
이 안에서 mybatis의 스프링 설정이 모두 이루어진다.
- <!-- application-context를 등록하는 전역 리스너 -->
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </listener>
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>
- classpath:spring/application-context.xml
- classpath:spring/mybatis-context.xml
- </param-value>
- </context-param>
mybatis-context.xml
mybatis에 대한 스프링의 모든 설정을 구성한다.
좀 복잡하지만, 천천히 주욱 읽어보시길 권한다.
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:tx="http://www.springframework.org/schema/tx"
- <!-- 데이터베이스 풀 설정 -->
- <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
- <property name="driverClassName" value="${jdbc.driverClassName}" ></property>
- <property name="url" value="${jdbc.url}"></property>
- <property name="username" value="${jdbc.username}"></property>
- <property name="password" value="${jdbc.password}"></property>
- <property name="initialSize" value="${jdbc.initialSize}"></property>
- <property name="maxActive" value="${jdbc.maxActive}"></property>
- <property name="minIdle" value="${jdbc.minIdle}"></property>
- <!-- validationQuery:유효 검사용 쿼리( 1개 이상의 row를 반환하는 쿼리를 넣어주면 된다. ) -->
- <property name="validationQuery" value="select 1" />
- <!-- testWhileIdle:컨넥션이 놀고 있을때 -_-; validationQuery 를 이용해서 유효성 검사를 할지 여부. -->
- <property name="testWhileIdle" value="true" />
- <!-- timeBetweenEvictionRunsMillis:해당 밀리초마다 validationQuery 를 이용하여 유효성 검사 진행 -->
- <property name="timeBetweenEvictionRunsMillis" value="7200000" />
- </bean>
- <!-- mybatis 설정 -->
- <bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
- <!-- 데이터소스 연결 -->
- <property name="dataSource" ref="dataSource" />
- <!-- 설정 연결 -->
- <property name="configLocation" value="classpath:/mybatis/config.xml"></property>
- <!-- 매퍼 연결 -->
- <property name="mapperLocations" value="classpath:/mybatis/mapper/*.xml" />
- </bean>
- <!-- 트랜젝션 매니저 -->
- <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
- <property name="basePackage" value="Mapper 파일이 정의되어 있는 패키지 경로" />
- </bean>
- <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
- <property name="dataSource" ref="dataSource"></property>
- </bean>
- <tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true" />
- </beans>
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 별칭을 구성한다.
매핑과 같은 경우 스프링에서 연결하고 있으므로 이 파일에서 매핑할 필요없다.
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE configuration
- PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
- <configuration>
- <settings>
- <setting name="cacheEnabled" value="false" />
- <setting name="useGeneratedKeys" value="true" />
- <setting name="defaultExecutorType" value="REUSE" />
- </settings>
- <typeAliases>
- <typeAlias alias="Test" type="com.shadowbug.spring.info.TestInfo"></typeAlias>
- </typeAliases>
- </configuration>
mapping.xml
테이블에 대한 매핑정보를 선언한다.
직관적이라서 왠만한것은 다 이해할 거라 믿으며, 이해가 안되시는 부분은 전문서적이나, 블로그 홈페이지를 확인하시길 바란다.
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE mapper
- PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
- <mapper namespace="com.shadowbug.spring.info.TestInfo">
- <resultMap type="Test" id="TestResult">
- <id property="id" column="id"/>
- <result property="value" column="value"/>
- </resultMap>
- <select id="getPerson" parameterType="Integer" resultMap="TestResult">
- SELECT
- *
- FROM
- test
- WHERE
- id=#{id}
- </select>
- <insert id="add" parameterType="Test"> <!-- useGeneratedKeys="true" keyProperty="id"> -->
- INSERT INTO
- test(id, value)
- VALUES
- (0, #{value})
- </insert>
- ...
- </mapper>
1. TestDao ( SqlSession 방식 )
전통적인 Dao 구현방식이다. Dao내부에서 SqlSession을 이용해서 SQL을 처리한다.
- public class TestDao {
- @Autowired
- private SqlSession session;
- @Transactional(readOnly=false)
- public void add(final TestInfo testInfo) {
- session.insert(VO + ".add", testInfo);
- }
- }
2. TestDao ( 프록시 방식 )
다른 개발자들은 어떤방식을 사용하는지 모르겠지만 개인적으로 많이 사용하는 방식이다.
인터페이스에서 엑세스 포인트를 설정하고, mapper에서 쿼리를 정의하고 있다.
함수 이름이 mapper의 아이디를 의미한다.
내부적으로 트랜젝션 처리가 되어있으므로,
인터페이스에서 @Transactional은 정의 안해도 되므로 굳이 하려고 노력하지는 말자.
나머지 자세한 내용은 마이바티스 공식문서 및 책을 참조하시기를 ....
- public interface UserDao {
- public UserInfo get(@Param("id") final long userId);
- .....
- }
사용할 땐 인터페이스를 주입받으면 된다
- @Service
- @Transactional(readOnly=true)
- public class UserService {
- @Autowired
- private UserDao userDao;
- ....
- }
[출처] 스프링 - mybatis 연동|작성자 루미주인