[springboot] mybatis 연동

- Goal

spring boot+ gradle + mybatis 연동


- Time

20min


- Enviroment

 springboot1.4 , java 1.8, gradle, 


- Tutorial

build.gradle에 라이브러리 추가

1
compile("org.mybatis.spring.boot:mybatis-spring-boot-starter:1.1.1")
cs


mapper interface 추가

1
2
3
4
5
@Mapper
public interface HistroyMapper {
    @Select("SELECT * FROM HISTORY WHERE SEQ= ${seq}")
    List<History> selectHistory(String seq);
}
cs


controller에서 사용

1
2
3
4
5
6
7
8
@Autowired
private HistroyMapper historyMapper;
 
@RequestMapping("/mybatis-mapping")
@ResponseBody
public List<History> mybatisMapping(){
    return historyMapper.selectHistory("19");
}    
cs


해당 url 호출하여 결과 확인


물론 간단한 쿼리에 경우 위와 같이 작성할 수 있지만, 복잡한 쿼리에 경우 xml로 작성하는것이 편하다. 

xml로 작성하기 위한 방법 


dao class를 작성한다. 

HistoryDao.java 

1
2
3
4
5
6
7
8
9
@Component
public class HistoryDao {
    @Autowired
    private SqlSession sqlSession;
    
    public List<HashMap> selectHistoryBySeq(String seq){
        return this.sqlSession.selectList("selectHistoryBySeq",seq);
    }
}
cs


src/main/resources/ 폴더 밑에 mapper package 생성 후 HistoryMapper.xml 파일 생성

HistoryMapper.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
26
27
28
29
30
<?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.beans9.web.dao.HistoryDao">
    <select id="selectHistoryBySeq" parameterType="string" resultType="hashmap">
        select 
            b.date, 
            b.type1 + b.type2 + b.type3 + b.type4 + b.type5 total,
            b.type1,
            b.type2,
            b.type3,
            b.type4,
            b.type5
            from (
            select 
            a.date     
            ,ifnull(max(case when a.type = 1 then a.cnt end),0) as type1
            ,ifnull(max(case when a.type = 2 then a.cnt end),0) as type2
            ,ifnull(max(case when a.type = 3 then a.cnt end),0) as type3
            ,ifnull(max(case when a.type = 4 then a.cnt end),0) as type4
            ,ifnull(max(case when a.type = 5 then a.cnt end),0) as type5
        from (
            select substr(date,1,10) date,type,count(1) as cnt from history
            group by substr(date,1,10),type
            ) a
            group by date
        )b
    </select>
</mapper>
cs

- 이런식에 복잡한 쿼리를 jpa로 하려면...........(물론 방법은 있겠지요..   -_- )


application.properties와 동일 위치에 mybatis-config.xml 파일 생성

mybatis-config.xml

1
2
3
4
5
6
7
8
9
10
11
12
<?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="com.beans9.web.model"/>
    </typeAliases>
    <mappers>
        <mapper resource="mapper/HistoryMapper.xml"/>
    </mappers>
</configuration>
cs

model 위치와 mapper 파일 위치를 맞춰서 작성해 준다. 


application.properties에서 mybatis-config.xml 파일 위치 설정

1
mybatis.config=classpath:mybatis-config.xml
cs

예제 github를 보면 아래와 같이 적혀 있는데 실제로 그렇게 작성하면 파일을 찾지 못하고 에러가 난다. 

(위와 같이 적어줘야 정상동작)

1
mybatis.config-location=mybatis-config.xml
cs


controller에서의 사용

1
2
3
4
5
6
7
8
@Autowired
private HistoryDao historyDao; 
 
@RequestMapping("/mybatis-mapping1")
@ResponseBody
public List<HashMap> mybatisMapping1(){
    return historyDao.selectHistoryBySeq("6");
}
cs


해당 url 호출하여 결과 확인

폴더 구조 및 파일 위치.



생각보다 간단한 설정만으로 mybatis 사용이 가능해졌다. 

아래 github를 참조하시면 좋을듯 하다. 

https://github.com/mybatis/spring-boot-starter