일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- tomcat
- 클린코드
- 권한
- OAuth
- 시큐리티
- 스프링 부트
- load balancing
- Spring
- GC
- Producer
- 페이스북
- RabbitMQ
- 리팩토링
- apache
- 스프링
- Refactoring
- 비동기
- clean code
- oauth2
- java
- 페이징
- spring boot
- g1
- JPA
- assertj
- jvm
- JWT
- gdg
- 스프링부트
- Security
Archives
- Today
- Total
허원철의 개발 블로그
Spring Boot - MyBatis 본문
이번 글은 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