SpringFramework MyBatis MySQL 연동하기

개발환경

windows10 pro, STS, jdk1.8, mysql8(docker), mysql workbench 8


Related Posts

1.STS로 Spring 프레임워크 개발환경셋팅 2.Spring MVC 프로젝트를 생성하여 톰캣에서 실행하기 3.spring mvc 프로젝트 한글설정(utf8)

4.Windows10pro docker 설치하기 5.Docker에서 mysql설치하고 접속해보기

6.Spring 프로젝트 mysql접속 junit 테스트 하기 7.SpringFramework MyBatis MySQL 연동하기


시작하기

STS의 스프링 MVC프로젝트와 docker에 설치한 mysql을 이용하여, 스프링 + MyBatis + MySLQ 설정을 해보자

MyBatis 구성도

스프링 프로젝트에 라이브러리 추가

pom.xml 아래 라이브러리들을 추가하자.

1.MyBatis mybatis 라이브러리

1
2
3
4
5
6
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>

2.MyBatis-Spring Spring과 MyBatis를 연결하는 라이브러리

1
2
3
4
5
6
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>

3.spring-jdbc Spring의 jdbc 라이브러리

1
2
3
4
5
6
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>

4.spring-test Spring과 MyBatis의 정상적인 접속을 확인하기 위한 Spring junit test를 하기 위해 추가

1
2
3
4
5
6
7
<!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${org.springframework-version}</version>
<scope>test</scope>
</dependency>


Spring 프로젝트의 root-context.xml 파일 수정

root-context.xml파일 네임스페이스 추가 aop, context, jdbc, mybatis-spring 네임스페이스 추가하자. 앞서 pom.xml에 라이브러리를 추가 했기 때문에 mybatis-spring와 같은 네임스페이스가 root-context.xml의 Namepaces 항목에 자동으로 보이게 되며, 간단히 클릭후 파일을 저장하면 된다. (이걸 여태 몰라 난 일일이 웹에서 네임스페이스를 찾아 타이핑을 했더랬다.)

root-context.xml에 네임스페이스 추가화면 위에서 처럼 해당 네임스페이스를 선택한뒤 root-context.xml파일을 저장하면 자동으로 아래처럼 소스가 저장된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd
http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd">

<!-- Root Context: defines shared resources visible to all other web components -->

</beans>


Spring 프로젝트의 root-context.xml에 datasource 설정

root-context.xml파일에 spring jdbc를 이용하여 datasource를 설정하자. 접속하려는 db URL, db user 이름 비밀번호 정보가 필요하다.

1
2
3
4
5
6
<bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/hanumoka_spring_template?useSSL=false"></property>
<property name="username" value="hanumoka"></property>
<property name="password" value="password"></property>
</bean>


DataSource 테스트

지금까지 진행한 설정을 spring-test를 통해 단위테스트를 진행하자. spring-test 모듈의 장점은 spring 테스트를 할때 was상에서 하지 않기 때문에 가볍고, was에 고립된 테스트를 할 수 있따.

1.DataSourceTest.java 파일 작성 스프링 프로젝트의 src/test/java 에 DataSourceTest.java 파일을 생성하다.

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
package org.hanumoka.web;

import java.sql.Connection;

import javax.inject.Inject;
import javax.sql.DataSource;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"file:src/main/webapp/WEB-INF/spring/**/root-context.xml"})
public class DataSourceTest {

@Inject
private DataSource ds;

@Test
public void testConection() throws Exception{
try(Connection con = ds.getConnection()){
System.out.println(con);
}catch(Exception e) {
e.printStackTrace();
}//try_
}//test_

}

간단히 소스를 설명하자면,

@RunWith(SpringJUnit4ClassRunner.class)

는 Spring 테스트용 컨테이너를 사용하겠다는 의미이다.

@ContextConfiguration(locations = {"file:src/main/webapp/WEB-INF/spring/**/root-context.xml"})

는 테스트용 Spring 컨테이너에서 사용할 설정파일들을 지정한다.

위 파일을 junit으로 실행하여 Spring 프레임워크에서 DataSource가 정상적으로 주입되고 커넥션을 가져오는지 확인하자.

Spring DataSource junit 테스트


Spring 프레임워크에 MyBatis 설정 셋팅

1.SqlSessionFactory 객체 설정

root-context.xml 파일에 SqlSessionFactoryBean bean을 추가하자. SqlSessionFactoryBean는 MyBatis에서 SqlSessionFactory를 생성하는 빈이다.

1
2
3
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
</bean>

2.mybatis-config.xml 파일 추가

mybatis-config.xml을 src/main/resources에 추가하자. 이 파일은 SQL Mapping정보등 스프링의 설정과 별도의 MyBatis의 설정 기능을 저장하는 용도의 파일이다.

1
2
3
4
<?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>
</configuration>

mybatis-config.xml 파일

3.mybatis-config.xml 파일을 root-context.xml 에 추가

방금 생성한 mybatis-config.xml파일이 스프링 프레임워크가 동작할때 주입되게 설정이 필요하다. root-context.xml의 sqlSessionFactory의 프로퍼티로 mybatis-config.xml을 추가하자.

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

root-context.xml를 수정하자

4.mybatis 연결 테스트

mybatis의 SqlSessionFactory를 통해서 MySql에 접속하여 SqlSession객체가 생성되는지 테스트 해보자. src/test/java 에 MyBatisTest.java 를 생성하자.

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
32
33
package org.hanumoka.web;

import javax.inject.Inject;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"file:src/main/webapp/WEB-INF/spring/**/root-context.xml"})
public class MyBatisTest {

@Inject
private SqlSessionFactory sqlFactory;

@Test
public void testFactory() throws Exception{
System.out.println(sqlFactory);
}//testFactory_

@Test
public void testSession() throws Exception{
try(SqlSession session = sqlFactory.openSession()){
System.out.println(session);
}catch(Exception e) {
e.printStackTrace();
}

}//testSession_

}

생성한 파일을 junit테스트를 통해 테스트 하자. spring mybatis mysql 설정 테스트 결과