Spring Boot Mybatis 구성 및 설정에 대해서 설명한다.
모듈 구조
Maven Dependency mybatis-spring-boot-starter
추가pom.xml 1 2 3 4 5 <dependency > <groupId > org.mybatis.spring.boot</groupId > <artifactId > mybatis-spring-boot-starter</artifactId > <version > 2.0.1</version > </dependency >
Spring Boot Mybatis 모듈을 사용하려면 mybatis-spring-boot-autoconfigure
필요하다. mybatis-spring-boot-autoconfigure
는 mybatis-spring-boot-starter
에 종속 되어있는걸 확인 할 수 있다.mybatis-spring-boot-starter\pom.xml 1 2 3 4 5 6 7 8 9 10 11 12 <dependency > <groupId > org.mybatis.spring.boot</groupId > <artifactId > mybatis-spring-boot-autoconfigure</artifactId > </dependency > <dependency > <groupId > org.mybatis</groupId > <artifactId > mybatis</artifactId > </dependency > <dependency > <groupId > org.mybatis</groupId > <artifactId > mybatis-spring</artifactId > </dependency >
Spring Boot Mybatis 구조 inmemory db(H2) Maven Dependency mybatis를 이용하기 위해서 Inmemory DB(H2)를 애플리케이션이 동작하면 구성 되도록 설정했다. 개인 DB가 설정 되어있다면 inmemory db(H2) Maven Dependency는 제외 해도 된다.
pom.xml 1 2 3 4 5 <dependency > <groupId > com.h2database</groupId > <artifactId > h2</artifactId > <scope > runtime</scope > </dependency >
스프링 부트는 schema.sql
및 data.sql
에서 각각 SQL을 자동 로드 한다.schema.sql 1 2 3 4 5 6 CREATE TABLE USER ( id integer NOT NULL , full_name varchar (255 ) not null , primary key (id ) );
data.sql 1 2 3 INSERT INTO USER (id , full_name) VALUES (1 , 'jaehyun' );INSERT INTO USER (id , full_name) VALUES (2 , 'jinsil' );INSERT INTO USER (id , full_name) VALUES (3 , 'nada' );
application.xml application.yaml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 spring: datasource: username: sa password: url: jdbc:h2:mem:testdb driver-class-name: org.h2.Driver hikari: jdbc-url: jdbc:h2:~/test initialization-mode: always mybatis: mapper-locations: classpath:mapper/*.xml configuration: lazyLoadingEnabled: true aggressiveLazyLoading: false mapUnderscoreToCamelCase: true
Mybatis 자동설정에 대한 구조 확인spring-configuration-metadata.json 1 2 3 4 5 6 7 8 ... { "sourceType" : "org.mybatis.spring.boot.autoconfigure.MybatisProperties" , "name" : "mybatis.mapper-locations" , "description" : "Locations of MyBatis mapper files." , "type" : "java.lang.String[]" }, ...
위와 같이 mybatis 설정은 name
에 자동 설정 되어 있는 것을 확인할 수 있다.
Domain User.java 1 2 3 4 5 6 7 8 9 @Builder @AllArgsConstructor @NoArgsConstructor @Getter @Setter @ToString @EqualsAndHashCode (of = "id" )public class User { private int id; private String nameName; }
Mapper Spring Boot Mybatis는 기본적으로 @Mapper
주석으로 표시된 매퍼를 검색 한다.
UserMapper.java 1 2 3 4 5 6 @Mapper public interface UserMapper { User getUserInfo (int id) ; }
UserMapper.xml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <?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 ="me.mybatis.UserMapper" > <select id ="getUserInfo" resultType ="me.mybatis.User" > SELECT ID , FULL_NAME FROM USER WHERE ID = #{id} </select > </mapper >
Service UserService.java 1 2 3 4 5 6 7 8 9 10 11 12 @Service @Slf 4j@AllArgsConstructor public class UserService { private UserMapper userMapper; public User getUserInfo (int id) { return userMapper.getUserInfo(id); } }
Controller UserController.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 @Slf 4j@AllArgsConstructor @RequestMapping (value = "/user" , produces = MediaType.APPLICATION_JSON_UTF8_VALUE)@RestController public class UserController { private final UserService userService; @GetMapping ("/{id}" ) public ResponseEntity getUserInfo (@PathVariable int id) { User user = userService.getUserInfo(id); log.debug("users {}" , user); return ResponseEntity.ok(user); } }
결과 화면
소스코드
참조