Spring Boot Mybatis연동하기
Spring boot 이게 그냥 Spring프레임워크의 많은 부분이 다시 자동설정되는 것이라는 정도로 알고있는데
대부분 설정관련 포스팅을 보면 xml, 혹은 어노테이션으로 설정을 한다. 아마도 Spring기준으로 설명을 하거나 해서 그런게 아닐까 하지만... Spring Boot에서도 똑같이 적용 되겠지만 난,,, 왜 안되는거지??... 다양한 설정방법들을 잘 찾아봐야겠다..
일단은 기본으로 Spring boot initialize로 생성된 프로젝트를 기준으로 적어보자~! (Editor는 VScode)
build tool도 아직 사용할줄을 잘 몰라서 차이는 크게 모르지만 Gradle을 사용했다.
대부분 포스팅은 Maven으로 되어있긴해도 요즘은 Gradle도 많은 듯하네..ㅎㅎ
dependency 설정
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-web-services'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
web-service는 아직 어디다 쓰는지 모르는중...
starter-web에 내장 톰켓등이 있고 ( 그러나 그냥은 jsp는 안된다~!)
개발을 편하게 해주는 devtools를 dependencise에 추가하자 (자동재시작 등등드읃ㅇ.... 내가 모르는 기능이 많겠죠...?)
compile group: 'org.mybatis.spring.boot', name: 'mybatis-spring-boot-starter', version: '2.1.3'
그리고 spring-boot-starter로 application.propertise를 통해 간단히 설정.
mybatis만 이용시에는 Bean으로 Datasource, SessionFactory 등을 설정해서 사용해야하는데... Spring Boot만 해봐서....
(저 방식으로 설정하는 방법도 익히는게 필요할듯 ..)
application.properties 설정
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver #사용하는 DB에 맞게 드라이버설정
spring.datasource.url=jdbc:mysql://localhost:3306/mytest_db?serverTimezone=UTC
spring.datasource.data-username={DB User 명}
spring.datasource.data-password={DB 패스워드}
#hikari도 설정
spring.datasource.hikari.username=test
spring.datasource.hikari.password=rkd1234
#mapper xml의 경로를 설정
mybatis.mapper-locations=mapper/**/*.xml
mybatis.type-aliases-package=com.web.tutorial.demo.tutorial.model
hikari라는 걸 기본으로 사용해서 datasource 관련 설정만 하면 저 유저명과 비밀번호를 사용하지 않는다.
저 hikari가 뭔지도 알아봐야할듯...
mapper경로는 resource하위 부터 시작!
Mapper.xml 작성
<?xml version="1.0" encoding="UTF-8"?>
<!-- 아래 !DOCTYPE 이 있어야 관련 자동완성을 도와줍니다 -->
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace에 Mapper.class 위치를 명시하여 맵핑?!한다. -->
<mapper namespace="com.web.tutorial.demo.tutorial.mapper.UserMapper">
<!-- Mapper.class에 매소드명이 id 파라미터 타입은 풀패키지명 또는 properties에 설정으로.. -->
<insert id="insert" parameterType="UserModel">
INSERT INTO test_user ( name, phone ) VALUES ( #{name}, #{phone});
</insert>
</mapper>
Mapper클래스와 Mapper.xml을 맵핑?시켜서 java와 sql 분리하여 개발되는게 목표인것 같습니다.
Mapper 클래스
package com.web.tutorial.demo.tutorial.mapper;
import com.web.tutorial.demo.tutorial.model.UserModel;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper {
public int insert(UserModel userModel);
}
Mapper는 interface로 생성하고 @Mapper 어노테이션만 달아주면 끝~!
이제 java 코드에서 @Autowired로 불러와서 사용해주면 된다. 간편간편!
설정파일이 xml, yaml 등 다양한데 기본적으로 되어있는건 잘 안보여서 많이 해맴.....
일한 기억을 되살려서 럼ㄴ기ㅏ;럿ㅎ;ㅣㅁ러나ㅗㅎ빠생.