스프링 MyBatis 연동
스프링과 MyBatis 사이에 연동을 위해서는 두 프레임 워크를 이어주는 MyBatis-Spring 모듈 외에 여러가지 라이브러리들이 필요합니다.
MyBatis 라이브러리 추가
아래에 코드들을 [pom.xml]에 추가합니다. 다른 버전을 사용하고 싶으시면 Maven Repository 링크를 눌러서 다른 버전을 알아본 뒤 추가하시기 바랍니다.
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.4</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version,>1.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.10.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.3.10.RELEASE</version>
<scope>test</scope>
</dependency>
root-context.xml 수정
웹과 관련이 없는 라이브러리들은 root-context.xml을 통해서 연동을 시킵니다. MyBatis를 사용하기 전, 조금 전에 받은 spring-jdbc 모듈을 이용하여 JDBC 커넥션을 자동으로 처리할 수 있도록 DataSource를 추가해줍니다.
프로젝트 폴더에서 [src/main/webapp/WEB-INF/spring] 내에 있는 [root-context.xml] 파일을 엽니다.
[root-context.xml] 하단에 [Namespaces] 탭을 선택하고, 위에 이미지처럼 aop, beans, context, jdbc, myBatis-spring을 선택하고 [저장]을 합니다.
저장을 하고 [Soruce] 탭에 들어가보면, root-context.xml에 네임스페이스가 추가된 것을 볼 수 있습니다.
이제 <beans></beans> 사이에 JDBC를 사용하기 위한 DataSource를 추가합니다. 코드는 복사 붙여넣기를 할 수 있도록 아래에 기재해두었습니다. MariaDB와 MySQL을 잘 보고 붙여넣기 바랍니다.
<!-- MariaDB JDBC DataSource -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.mariadb.jdbc.Driver" />
<property name="url" value="jdbc:mariadb://127.0.0.1:3306/test" />
<property name="username" value="root" />
<property name="password" value="passwd" />
</bean>
<!-- MySQL JDBC DataSource -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1:3306/test" />
<property name="username" value="root" />
<property name="password" value="passwd" />
</bean>
SQL Mapping을 위한 MyBatis 관련 추가 파일 생성
MyBatis 설정 기능을 활용할 수 있도록 [mybatis-config.xml] 파일을 생성합니다. mybatis-config는 select 쿼리 결과문을 bean과 list에 담아서 결과를 출력해주는 역할과 다양한 기능을 쓸수 있도록 도와줍니다.
[src/main/resources]에서 오른쪽 클릭을 하고 [Other]을 클릭합니다.
[Other]에서 [XML Fille]을 찾아서 [Next]를 누릅니다.
[mybatis-config.xml]을 입력하고 [Finish]를 누릅니다.
방금 생성한 [mybatis-config.xml]에 위에와 같은 코드를 입력하고 저장을 합니다.
<?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>
<typeAliases>
</typeAliases>
</configuration>
다음은 사용할 SQL 쿼리문을 저장 시키기 위한 Mappers 폴더를 생성합니다. [src/main/resources]에서 오른쪽 클릭을 하고 [Package]를 선택합니다.
[Package]의 Name을 mappers로 지정하고 [Finish]를 누릅니다.
생성된 [mappers] 패키지에 테스트를 위한 [*Mapper.xml] 파일을 추가합니다. 저는 [testMapper.xml]로 추가하였습니다.
추가한 [*Mapper.xml] 파일에 위에와 같은 코드를 넣습니다. [namespace]의 지켜야할 형식은 따로 없지만 될 수 있으면 패키지명과 함께 *Mapper를 넣어서 [xxx.yyy.zzz.*Mapper]로 합니다.
<?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="hanazuou.imas.mlst.testMapper">
</mapper>
이제 마지막으로 root-context.xml에 myBatis Mapping을 위한 경로를 지정해줄 차례입니다. SQL 실행시 객체를 생성해주는 [sqlSessionFactory]를 root-context.xml에 추가해줍니다.
property를 보시면 DB와 스프링을 연동 시켜주는 JDBC의 dataSource, bean과 list에 select 결과문을 담아주는 mybatis-config.xml, SQL문이 쓰일 *Mapper.xml의 경로가 적혀있습니다.
그리고 마찬가지로 root-context.xml에 sqlSession을 추가합니다. DB에 사용이 끝나면 sqlSessionFactory에 접근하여 커넥션을 close()를 하는 기능을 해줍니다. 이를 추가함으로써 SQL문을 사용할 때마다 커넥션을 일일히 끊어줘야하는 번거로움이 사라집니다.
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:/mybatis-config.xml" />
<property name="mapperLocations" value="classpath:/mappers/**/*Mapper.xml" />
</bean>
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="clearCache">
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg>
</bean>
이로써 스프링에 MyBatis를 연동시키기 위한 설정 작업이 완료되었습니다. 다음 글에서는 컨트롤러 사용방법과 이를 이용해서 MyBatis로 DB 쿼리문을 사용하는 방법에 대해서 알아보겠습니다.