━━━━ ◇ ━━━━
Spring/Spring 수업

Spring 07. MyBatis 연결 설정하기

스프링을 이용한 개발 중 국내에서 가장 많이 사용되는 방법이

MyBatis와의 연동 작업을 통해서 SQL 처리에 대한 개발 생산성을 높이는 방법이라고 하더라.


쉽게 말해서 현업에서 많이 사용하는 방법이라고 하니


우리도 배워 보자.


우선 pom.xml 에 라이브러리를 추가해 볼거야.



프로젝트의 pom.xml 파일을 더블 클릭



에디터 윈도우 하단의 Dependencies 를 선택



add 선택



위의 라이브러리 들을 입력해 주면 되.



라이브러리를 추가하는 또 다른 방법은 에디터 윈도우 하단의 pom.xml 을 선택



dependencies 안에 수동으로 직접 입력해도 되


복사 붙여 넣기 하라고 소스를 올려주는 친절을 보여줄까?


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
<dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.39</version>
        </dependency>
        
        <!-- MyBatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.2.8</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.2.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
cs


위의 설정을 pom.xml에 추가하고 저장해서 라이브러리가 다운로드 되는 것을 확인할 수 있어.


이제 root-context.xml 를 수정해 보자.



이 파일은 스프링과 관련된 설정을 할 때, 웹 자원과 관련되지 않은 모든 자원의 설정을 위해 존재한대.


웹 자원의 경우에는 appServlet 을 열어보면 다른 xml 파일이 있을거야.



root-context.xml 파일을 더블클릭하고 에디터 윈도우 하단의 namespaces 를 선택



위의 체크된 부분을 선택해줘



다시 하단의 source 탭을 선택하면



네임스페이스 에서 체크한 것들이 소스에 자동으로 입력되어 있는 것을 볼 수 있을거야.


이제 MySQL 까지 연결해 보자.


root-context.xml 파일을 손봐야 한다는 것까진 이제 알겠지?


좀 전에 추가한 spring-jdbc 모듈의 클래스를 이용해서 DataSource 라는 것을 추가해 줘야 해.


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
<?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.1.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.1.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd">
    
    <!-- Root Context: defines shared resources visible to all other web components -->
    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource"
        lazy-init="false">
 
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://127.0.0.1:3306/springdb" />
        <property name="username" value="Spring" />
        <property name="password" value="1234" />
    </bean>        
</beans>
 
cs


이런식으로 작성하면 되


20번 라인에는 자기 아이피를 입력하면 될것이고


21번 라인에는 db 접속자 아이디


22번 라인에는 비밀번호


이제 DataSource 테스트를 진행 해 보자.



테스트를 위한 새 클래스를 생성하고



생성된 위치는 위와 같아


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 com.aristatait.spring;
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/**/*.xml"})
public class DataSourceTest {
 
    @Inject
    private DataSource ds;
    
    @Test
    public void testConnection() throws Exception {
 
        try (Connection con = ds.getConnection()) {
            System.out.println(con);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
}
cs




@ 뒤에 쓰여져 있는 코드들은 애노테이션이라고 불러


구체적으로 12번 13번 라인의 애노테이션은 현재 테스트 코드를 실행할 때 스프링이 로딩되도록 하는 부분이고


16번 라인은 인스턴스 변수를 스프링이 생성해서 주입해 주므로 개발자가 객체 생성 혹은 다른 작업을 하지 않아도 되도록 


만들어 줘.


그리고 19번 라인은 테스트를 진행하지


이제 테스트를 해보자


JUnit 으로 실행을 하면 되



테스트할 파일을 우클릭하고 Run As > Junit Test 를 선택하는 거야


그런데 그 결과가 기대했던 내용이 아니네 ㅠㅠ



콘솔에도 DB에 연결되었다는 문구가 없고



JUnit의 실행 결과에도 Errors 가 떴어



지난번 포스트에서 언급했었는데, 이걸 내가 빼먹었더라구


JUnit 의 버전은 4.11 이상이 되도록 해야 하는데 그대로 내버려 둬서


4.7로 되어 있었어



JUnit의 버전을 수정하고 다시 테스트를 실행 하였더니 


mysql에 정상적으로 연결되었음을 확인 할 수 있었어



JUnit의 실행 결과에도 아무런 에러가 검출되지 않았고


여기서 잠깐 정리하고 넘어가자


지금까지 했던 내용은 


1. pom.xml에 라이브러리 추가


2. root-context.xml 에 네임스페이스 설정 및 DataSource 연동

(MySQL - Spring 연결)


이제 할일은 Spring - MyBatis 연결 이야.


root-context.xml을 먼저 수정해야 겠지?



DataSource 밑에 sqlSessionFactory를 추가 했어


앞서 MyBatis 가 SQL 문의 처리를 도와주는 것이라고 했는데,


sqlSessionFactory 는 데이터베이스와의 연결과 SQL의 실행에 대한 모든 것을 가진 객체라고 하더라.


<property name="configLocation" value="classpath:/mybatis-config.xml"></property> 이부분은


SQL Mapping 프레임 워크를 별도의 파일로 만들어 주기 위해 삽입한 문구야


지금은 복잡해 보이지만 나중에 보기가 편해질꺼야


예전에 JSP 프로젝트를 해본적이 있는데, 그때 SQL Map 을 따로 분리해 놓으니까 


콘트롤러 파일에서는 아이디만 호출하고 SQL 문은 따로 정리가 되어 있더라구.



이렇게 하나 만들어 주고


그 소스 코드는 


1
2
3
4
5
6
7
<?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>
cs


여기에 각종 SQL 문이 추후에 추가된다는 거지


지금은 그냥 파일만 만들어 놓았어


초반에 설정하는 작업 이니까


이제 테스트를 해야지


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 com.aristatait.spring;
 
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/**/*.xml"})
public class MyBatisTest {
 
    @Inject
    private SqlSessionFactory sqlFactory;
    
    @Test
    public void testFactory() {
        System.out.println(sqlFactory);
    }
    @Test
    public void testSession() {
        try (SqlSession session = sqlFactory.openSession()){
            System.out.println(session);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
}
 
cs




JUnit으로 테스트를 실행하면



연결 성공 !!!


이 포스트는 여기까지 


그럼 ㅂㅂ2






COMMENT