티스토리 뷰

반응형


프로젝트를 만드는 과정을 기록해두자 !


mybatis-spring Documentaion



| 프로젝트 생성



프로젝트 생성 및 기본 설정 세팅은 아래 포스트를 참고해보자.


[Spring] Spring@MVC 프로젝트 세팅하기










| 필요 라이브러리 설정



MVC project 로 생성하면 아래 라이브러리는 자동으로 세팅된다.

- spring

- spring web 


MyBatis 라이브러리

- Mybatis

- Mybatis-Spring


MySQL 라이브러리

- mysql


spring-JDBC 라이브러리

spring-jdbc 와 spring 연동을 위해 spring version 이 필요하다.

- spring-jdbc



/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
24
25
        <!-- DB -->
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.22</version>
        </dependency>
         <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.6</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.5</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${org.springframework-version}</version>
        </dependency>
cs


spring transaction도 version을 현재 사용중이 spring version과 동일하게 해주자. 

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


version 을 변수로 사용할 수 있다.

원하는 변수명으로 태그를 만들고

${org.springframework-version} 로 사용할 수 있다.

1
<org.springframework-version>5.2.6.RELEASE</org.springframework-version>
cs










| MyBatis 관련 환경 설정



MyBatis 환경 설정을 위해

아래 두 파일이 필요한데 이전 프로젝트에서 사용하던 파일을 수정해서 사용하는게 편리하다.

- mybatis-config.xml

- mapper.xml



||| mybatis-config.xml



Dto 객체의 정보를 설정한다.


spring-mybatis를 사용하면서 기존에 작성해야했던 접속환경 정보가 다 필요 없어진다.

결국 필요한 정보는

<typeAliases>

<mappers>

만 남게된다.


src/main/resource/mybatis-config.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?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>
    
    <!-- 사용하려는 DTO에 대한 축약 이름 -->
    <typeAliases>
        <typeAlias type="com.cristoval.web.model.dto.Product" alias="product" />    
    </typeAliases>
    
    <!-- 사용할 쿼리에 대한 등록 -->
    <mappers>
        <mapper resource="product.xml" />
    </mappers>
    
</configuration>
cs



||| mapper.xml



SQL 쿼리문과 ORMapping을 설정하는 파일이다.

우선 준비만 해두자!










| MyBatis 에 필요한 Bean 만들기




mybatis-spring 사용을 위해 아래 세 개의 Bean을 만들어주어야 한다.

ㅇ DataSource

ㅇ SqlSessionFactoryBean

- MyBatis 설정 파일을 파탕으로 SqlSessionFactory를 생성

- Spring Bean 으로 등록해주어야 함

ㅇ SqlSessionTemplate

- 핵심적인 역할을 하는 클래스, SQL 실행이나 Transaction 관리

- SqlSession interface를 구현하며, Thread-safe

- Spring Bean 으로 등록해주어야 함


MyBatis 사용을 위한 Bean들은 백엔드와 관련이 있으므로

ApplicationConfig에 만들어주자.


순수 mybatis는 MyBatisUtil.java 파일이 필요해서

"com.cristoval.web.util"을 ComponentScan에 포함시켜야 했지만,

mybatis-spring 연동으로 @Repository인 Imlp도 없어지고 대신 imterface를 @MapperScan으로 읽는다.


transactionManager는 spring transaction을 위해 만들었다.


src/main/java/com/cristoval/web/config/ApplicationConfig.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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package com.cristoval.web.config;
 
import javax.sql.DataSource;
 
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.transaction.PlatformTransactionManager;
 
@Configuration
@ComponentScan("com.cristoval.web.model")
//@Repository인 Impl이 없어지고 대신 interface로 읽어서 등록
@MapperScan("com.cristoval.web.model.repo")
public class ApplicationConfig {
 
    @Bean
    public DataSource ds() {
        DriverManagerDataSource ds = new DriverManagerDataSource();
        ds.setDriverClassName("com.mysql.cj.jdbc.Driver");
        // schema & 계정 정보 확인 
        ds.setUrl("jdbc:mysql://localhost:0000/ssafyweb?serverTimezone=UTC&useUniCode=yes&characterEncoding=UTF-8");
        ds.setUsername("userId");
        ds.setPassword("userPw");
        
        return ds;
    }
    
    @Bean
    public SqlSessionFactoryBean factoryBean() {
        SqlSessionFactoryBean factory = new SqlSessionFactoryBean();
        factory.setDataSource(ds());
        factory.setConfigLocation(new ClassPathResource("mybatis-config.xml"));
        
        return factory;
    }
    
    @Bean
    public SqlSessionTemplate sqltemplate() throws Exception {
        SqlSessionFactoryBean factory = factoryBean();
        SqlSessionTemplate template = new SqlSessionTemplate(factory.getObject());
        
        return template;
    }
 
    @Bean
    public PlatformTransactionManager transactionManager() {
        return new DataSourceTransactionManager(ds());
    }
    
}
 
cs










| 단위 테스트(DataSource, SqlSessionTemplate)




단위 테스트에 대한 자세한(?) 정보는

아래 포스트에 따로 정리해보았다.




src/test/java/com/cristoval/web/BeanTest.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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package com.cristoval.web;
 
import static org.junit.Assert.assertNotNull;
 
import javax.sql.DataSource;
 
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mybatis.spring.SqlSessionTemplate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
 
import com.cristoval.web.config.ApplicationConfig;
 
//단위테스트를 스프링과 연동
@RunWith(SpringRunner.class)
//환경설정 파일 명시
@ContextConfiguration(classes = ApplicationConfig.class)
public class BeanTest {
 
    private static final Logger logger = LoggerFactory.getLogger(BeanTest.class);
    
    // Autowired 로 Bean 생성 확인
    @Autowired
    DataSource ds;
    
    @Autowired
    SqlSessionTemplate st;
    
    // 모든 테스트들은 @Test를 갖는다.
    @Test
    public void dsTest() {
        // DataSource가 null 이 아니다!
        assertNotNull(ds);
    }
    
    @Test
    public void templateTest() {
        // SqlSessionTemplate가 null 이 아니다!
        assertNotNull(st);
    }
    
}
 
cs






** 읽어보고 싶은 참고 글 **


반응형
댓글
최근에 올라온 글
최근에 달린 댓글
링크
Total
Today
Yesterday