고똘이의 IT 개발이야기

안녕하세요.

 

오늘은 스프링부트(Springboot) 프로젝트에서 Mybatis 연동에 대해서 알아보겠습니다.

 


1

- 개발환경

● 자바 1.8

● 스프링부트 2.2.4

● Sts 3.9.10

 

- 소스 설명

1. Gradle 기반으로 스프링부트 프로젝트를 생성 합니다. build.gradle에 아래와 같이 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
28
29
30
31
32
33
34
35
plugins {
    id 'org.springframework.boot' version '2.2.4.RELEASE'
    id 'io.spring.dependency-management' version '1.0.9.RELEASE'
    id 'java'
    id 'war'
}
 
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
 
repositories {
    mavenCentral()
}
 
dependencies {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
        
    }
    
    
    /* Mybatis */
    compile group: 'org.mybatis.spring.boot', name: 'mybatis-spring-boot-starter', version: '2.1.1'    // https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter
    compile group: 'org.mybatis', name: 'mybatis', version: '3.5.1'                                    // https://mvnrepository.com/artifact/org.mybatis/mybatis
    
}
 
test {
    useJUnitPlatform()
}
 
 
 

 

2. 프로젝트를 마우스 우측 클릭후 gradle → Refresh Gradle Project를 클릭해주세요.

 소스참조

 

 

3. 프로젝트의 gradle를 refresh 하면 아래와 같이 dependencies에 Mybatis jar파일이 추가 됩니다.

이미지 참조

 

 

4. 이제 jar 파일이 다 추가 되었으면 아래와 같이 패키지 생성과 config(설정)를 선언할DatabaseConfig.class 파일을 만들어 줍니다. 

이미지 참조

 

5. 이제 config 파일에 인터페이스 연동 설정과 SqlSessionFactory를 설정 해줍니다.(아래의 소스 주석을 참고 하시면 이해하시기 편할거 같습니다.)

 소스참조

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
58
59
60
61
62
63
64
65
66
 
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
 
 
@Configuration
@Lazy
@EnableTransactionManagement
// Interface가 있는 package 경로
@MapperScan(basePackages= "com.example.test.api.dao")
public class DatabaseConfig {
 
    /**
     * Session Factory 설정
     */
    @Bean
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource);
        // 리졸버에 등록된 패키지 하위의 dao 클래스를 스캔합니다.
        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
 
        // 오른쪽에 있는 리소스 경로에 들어감(src/main/resources)      
        sessionFactory.setMapperLocations(resolver.getResources(
            // 실제 쿼리가 들어갈 xml 패키지 경로
            "com/example/test/api/dao/mapper/*Mapper.xml"
        ));
 
        // Value Object를 선언해 놓은 package 경로
        sessionFactory.setTypeAliasesPackage( "com.example.test.api.vo" );
        return sessionFactory.getObject();
    }
 
    /**
     * Mybatis template 설정
     */
    @Bean
    public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) throws Exception {
        SqlSessionTemplate sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory);
        // underscore를 camelCase로 매칭 : 예) user_id -> userId
        sqlSessionTemplate.getConfiguration().setMapUnderscoreToCamelCase(true);
        // Insert시 생성되는 pk를 bean으로 반환
        sqlSessionTemplate.getConfiguration().setUseGeneratedKeys(true);
        return sqlSessionTemplate;
    }
    
    /** 
    * 트랜잭션 매니저 설정
    */
    @Bean(name = "transactionManager")
    public PlatformTransactionManager transactionManager(@Qualifier("dataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }
    
}
 

 

 

6. 이제 위와 같이 설정을 하셨으면 위에 명시된  Vo패키지에 Vo를 하나 만들어 줍니다.(각자 프로젝트에 맞게 Vo 패키지를 명시 하시면 됩니다.)위의 설정소스에서는 Vo패키지 설정은 Line41번 입니다.

이미지 참조

 

 

7. 5번 소스설정(Line21, Line37)에서 설정한 Mapper인터페이스와 Mapper.xml를 선언합니다.

이미지 참조

 

 

8. 이제 모든 설정을 다 끝났습니다. 마지막으로 Mapper.xml에 쿼리문을 작성 후 Mapper인터페이스와 Mapper.xml의 'id'를 맞춰 주시면 정상적으로 쿼리 실행이 가능합니다.

 소스참조

8-1. Mapper Interface

1
2
3
4
5
6
7
8
9
10
11
12
13
 
 
 
public interface TestMapper {
 
    // Result Type를 'TestVo'로 설정
    List<TestVo> selectTestList();
    
}
 
 

 

8-2. TestMapper.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="UTF-8"?>
 
 
    <select id="selectTestList" resultType="TestVo">
        
        SELECT
            *
        FROM TEST_TABLE
        
    </select>
 
</mapper>
 

 


- 글을 마치며

오늘은 Mysql 연결 이후에 세션팩토리 설정과 인터페이스, VO, XML 설정에 대해서 알아 봤습니다. 만약 설정을 하시던 도중 모르는 부분이나 에러가 발생하는 상황이 있으시면 아래의 댓글에 문의 남겨주시면 최대한 빠른 답변 드리겠습니다.


- 추천글

[springboot] 스프링부트 Mysql 연동 & 예제

 

[springboot] 스프링부트 Mysql 연동 & 예제

안녕하세요. 오늘은 스프링부트(Springboot) 프로젝트에서 MYSQL 연동방법에 대해서 설명 드리겠습니다. - 개발환경 ● 자바 1.8 ● 스프링부트 2.2.4 ● Sts 3.9.10 - 소스설명 1. Gradle 기반으로 스프링부트 프..

dion-ko.tistory.com

 

 

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band