◽ Spring, SpringBoot

[Spring - (7) ] Mybatis 설정하기

  mybatis는 sql 명령어를 관리해주는 편리한 라이브러리이다.

1. 전통적인 JDBC 프로그램
 - 직접 Connection을 맺고 마지막에 close()
 - PreparedStatement 직접 생성 및 처리
 - PreparedStatement 의 setXXX() 등에 대한 모든 작업을 개발자가 처리
 - SELECT 의 경우 직접 RestulSet 처리

2. MyBatis
 - 자동으로 Connection close() 처리
 - 내부적으로 PreparedStatement 처리
 - 리턴 타입을 지정하는 경우 자동으로 객체 생성 및 RestulSet 처리

 

pom.xml


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.6</version>
        </dependency>
        
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.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>
Color Scripter

코드로 추가하는 방법이 위의 방법이고 

 

아래의 방법은 Dependencies 목록을 이용하여 추가하는 방법이다.

 

이렇게 설정을 하고나면 maven에서 확인을 해준다.

 

 

 

root-context.xml


1. 사진과 같이 체크를 해준다.

 

2. 소스를 root-context.xml에 추가해준다.

1
2
3
4
5
6
7
    <!-- Root Context: defines shared resources visible to all other web components -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost:3306/project3?serverTimezone=UTC&amp;characterEncoding=utf-8"></property>
        <property name="username" value="root"></property>
        <property name="password" value="1111"></property>
    </bean>    
Color Scripter

 

 

 

그리고 추가적으로 root-context.xml에 아래와 같이 소스를 추가해준다.

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

 - MyBatis 에서 가장 핵싱적인 객체는 SQLSession 이라는 존재와 SQLSessionFactroy 입니다.
 - SQLSessionFactroy 의 이름에서 보듯이 내부적으로 SQLSession 이라는 것을 만들어 내는 존재.
 - SQLSession 을 통해서 Connection 을 생성하거나 원하는 SQL 을 전달하고, 결과를 리턴 받는 구조로 작성한다.
 - SQLSessionFactroy 를 등록하는 작업은 SQLSessionFactroyBean 을 이용합니다.
 - 패키지명을 보면 MyBatis 의 패키지가 아니라 스프링과 연동 작업을 처리하는 mybatis.spring 라이브러리의 클래스임을 알 수 있습니다.

 

 

 

 

 

mybatis-config.xml


 mybatis는 sql을 관리하는 만큼 sql의 관리 설정이나, sql문을 정의한 문서가 필요하다.

파일 위치

1
2
3
4
5
6
7
8
9
10
<?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>
        <package name="org.zerock.domain"/>
    </typeAliases>
</configuration>    

 

 

mapper.xml


  위의 그림은 다른 예제의 mapper들인데, 일단 경로가 어디인지만 파악해두자. Mybatis 테스트하는 것과는 관련은 없지만 mapper의 위치는 여기라고 알아만 두도록.

 

아래의 소스는 mapper.xml 파일에 들어가는 소스들이다. 위의 4줄은 공통사항이다.

1
2
3
4
5
6
7
8
9
10
11
12
<?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="com.smartbay.mapper.MemberMapper">
 
    <select id="login" resultType="MemberVO">
        select * from tbl_user where uid = #{uid} and upw = #{upw}
    </select>    
 
</mapper>
Color Scripter

 

 

 

 

테스트


위의 경로에 아래의 소스를 넣어 테스트를 진행한다.

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
34
35
36
37
38
39
package com.smartbay.controller;
 
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 DataSourceTest 
{
    @Inject
    private SqlSessionFactory sqlFactory;
    
    @Test
    public void testFactory(){
        System.out.println("\n >>>>>>>>>> sqlFactory 출력 : "+sqlFactory);
    }
    
    @Test
    public void testSession() throws Exception{
        
        try(SqlSession session = sqlFactory.openSession()){
            
            System.out.println(" >>>>>>>>>> session 출력 : "+session+"\n");
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
}
 
 
 
Color Scripter

 

위의 그림과 같이 뜨면 성공한 것이다.

푸터바