허원철의 개발 블로그

Spring Boot - MyBatis 본문

web

Spring Boot - MyBatis

허원철 2017. 4. 13. 19:57
이번 글은 Spring Boot에서 MyBatis를 사용한 글 입니다.
 



Spring Boot에서는 JPA와는 달리 번거롭게 Bean을 설정하는 작업이 필요하는 등 MyBatis를 제대로 지원해주지 않았는데, 1.5.2(?) 버전에서 프로퍼티가 추가 되었습니다. 그래서 제가 스프링에서 주로 써왔던 MyBatis를 다시 한번 써보고자 작성하게 되었습니다.

1. Gradle
 
1
2
3
dependencies {
    compile("org.mybatis.spring.boot:mybatis-spring-boot-starter")
}
cs


2. 요구사항

- MyBatis-Spring-Boot-Starter는 Java 6 이상 및 MyBatis-Spring 및 Spring Boot 버전이 필요합니다.
 

 MyBatis-Spring-Boot-Starter

 MyBatis-Spring

Spring Boot

 1.3.x (1.3.0)   

 1.3 or higher   

 1.5 or higher   

 1.2.x (1.2.1)   

 1.3 or higher   

 1.4 or higher   

 1.1.x (1.1.1)   

 1.3 or higher   

 1.3 or higher   

 1.0.x (1.0.2)   

 1.2 or higher   

 1.3 or higher   



3. Domain
 
- Lombok를 이용하여 간단하게 Domain을 만들어 줍니다.
 
1
2
3
4
5
6
7
8
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User implements Serializable {
    private Long idx;
    private String name;
    private String local ;
}
cs


4. SQL
 
- 해당 예제는 memory를 이용한 h2를 사용했기 때문에 table을 사전에 만들어주는 작업을 했습니다.
- resources 밑에 schema.sql를 만들어 User Table을 만들어줍니다.
 
1
2
3
4
5
CREATE TABLE USER (
  IDX   NUMBER        PRIMARY KEY   NOT NULL,
  NAME  VARCHAR(20)                 NOT NULL,
  LOCAL VARCHAR(20)                 NOT NULL
);
cs


5-1. Mapper Annotation
 
- interface 선언에 @Mapper를 달아주고 해당 @Insert, @Select, @Delete, @Update를 만들어 줍니다.
- argument에 Query에 넣을 값을 지정 할 수 있습니다.
 
1
2
3
4
5
6
7
8
9
10
11
@Insert("INSERT INTO USER VALUES (#{idx}, #{name}, #{local})")
void insert(@Param("idx") Long idx, @Param("name"String name, @Param("local"String local);
 
@Select("SELECT * FROM USER WHERE IDX = #{idx}")
List<User> findByIdx(@Param("idx") Long idx);
 
@Delete("DELETE FROM USER WHERE IDX = #{idx}")
void deleteByIdx(@Param("idx") Long idx);
 
@Update("UPDATE USER SET NAME = #{name} WHERE IDX = #{idx}")
void setFixedNameByIdx(@Param("name"String name, @Param("idx") Long idx);
cs

 


5-2. XML
 
properties에서 path를 잡아줍니다.
 
1
mybatis.config-location=classpath:mybatis-config.xml
cs

② 설정 xml 에서 domain에 해당하는 패키지 path와 mapper로 사용되는 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.tistory.heowc.domain"/>
    </typeAliases>
    <mappers>
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>
</configuration>
cs

③ <insert>, <select>, <delete>, <update> 안에 쿼리를 작성해줍니다.
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?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="UserMapper">
 
    <insert id="insert">
      INSERT INTO USER VALUES (#{idx}, #{name}, #{local})
    </insert>
 
    <select id="findByIdx" resultType="User">
      SELECT * FROM USER WHERE IDX = #{idx}
    </select>
 
    <delete id="deleteByIdx">
      DELETE FROM USER WHERE IDX = #{idx}
    </delete>
 
    <update id="setFixedNameByIdx">
      UPDATE USER SET NAME = #{name} WHERE IDX = #{idx}
    </update>
</mapper>
cs


참고

- 테스트 코드는 Github에 있으니 참고하시기 바랍니다.
 


'web' 카테고리의 다른 글

Spring Boot - Excel Upload & Download  (418) 2017.05.05
Spring Boot - Data JPA & ModelMapper  (414) 2017.04.30
Spring Boot + JPA + Time package Issue  (437) 2017.03.22
JPA - Persistence Context (영속성 컨텍스트)  (421) 2017.03.16
Spring Boot - Security + JWT  (423) 2017.02.13
Comments