앞에서 JSP 사용을 위한 설정을 해주고 뷰가 잘 나오는지 확인을 했으니 이번 포스팅에서는 RDBMS와 연동을 하고 DB에 있는 데이터를 가지고 오기 위한 용도로 쓸 마이바티스를 사용하기 위해 의존성 추가하는 과정을 쓰려고 한다.
커넥션 풀 설정
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@[호스트]:[포트번호]/[DB명]
spring.datasource.username=[사용자명]
spring.datasource.password=[암호]
application.properties에 위처럼 추가해주면 driver-class-name 부분이 위 그림과 다르게 빨갛게 나올 것이다. 그러면서 필자처럼 시간 낭비하지 말고 build.gradle에 아래를 추가해주도록 하자.
runtimeOnly 'com.oracle.database.jdbc:ojdbc8'
그러고 오른쪽 상단에 코끼리를 눌러서 라이브러리를 추가해주면 아마 application.properties에 에러 났던 부분이 정상적으로 돌아왔을 것이다.
마이바티스 설정
여기까지 잘 따라왔다면 다음은 application.properties에 아래를 추가해주자.
# MyBatis
# mapper.xml 위치 지정
mybatis.mapper-locations: mybatis-mapper/**/*.xml
# model 프로퍼티 camel case 설정
mybatis.configuration.map-underscore-to-camel-case=true
# 패키지 명을 생략할 수 있도록 alias 설정
mybatis.type-aliases-package=com.example.demo.mapper.domain
# mapper 로그레벨 설정
logging.level.com.example.demo.mapper.mapper=TRACE
다음으로 마이바티스 라이브러리 추가를 위해 build.gradle에 의존성을 추가해주자.
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.4'
항상 중요한 과정이 테스트이다. 지금 설정한 것이 제대로 됐는지 확인할 수 있는 가장 간단한 방법이고 여기서 테스트를 안 하고 넘어간다면 다음 과정에서 에러가 났을 때 디버깅하는 과정이 매우 혹독해질 것이다.
@SpringBootApplication 어노테이션이 있는 클래스에 @MapperScan 어노테이션을 추가해준다. 이 어노테이션을 추가해줌으로써 스프링 부트가 해당 경로에 @Mapper가 붙은 클래스들을 스캔한다.
com.todo.Hiplanner 하위에 mapper라는 디렉터리를 생성해주고 거기에 interface로 MemberMapper를 만들어준다.
위에서 말했듯이 스프링 부트가 @Mapper가 붙은 클래스를 스캔할 수 있도록 @Mapper를 적어준다.
테스트를 작성하면 위와 같은데 @Autowired만 사용해서 필드 주입을 하는 것은 추천하지 않는 방법이지만 테스트를 할 때만 사용한다.( 테스트가 아닌 경우에는 생성자 주입을 사용하도록 하자)
현재 DB에 있는 MEMBER 테이블에는 1개의 데이터만 존재한다. DB에서 가져온 값이 1과 같으면 테스트는 성공한 것이 된다.
성공적으로 테스트를 마쳤다. 이것으로 위에서 설정한 오라클 연동과 마이바티스 설정이 제대로 됐다는 것을 알 수 있다.
이 방법 말고 XML을 이용한 방법도 있는데 그것까지 보도록 하자.
MemberMapper 인터페이스에 getCnt2() 메서드를 추가해주자.
이 메서드는 resources/mybatis_mapper/MemberMapper.xml에서 구현해줄 것이다.
resources/mybatis_mapper/MemberMapper.xml를 만들어주고 아래와 같이 XML 파일을 작성해주자.
<?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.todo.Hiplanner.mapper.MemberMapper">
<select id="getCnt2" resultType="Integer">
select count(*) from member
</select>
</mapper>
package com.todo.Hiplanner.MybatisTest;
import com.todo.Hiplanner.mapper.MemberMapper;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import static org.assertj.core.api.Assertions.*;
@SpringBootTest
public class Test1 {
@Autowired
private MemberMapper memberMapper;
@Test
public void getCnt(){
int cnt = memberMapper.getCnt();
assertThat(cnt).isEqualTo(1);
}
//XML 방식
@Test
public void getCnt2(){
int cnt = memberMapper.getCnt2();
assertThat(cnt).isEqualTo(1);
}
}
앞에서 만들었던 Test1 클래스에 getCnt2() 테스트 케이스를 추가해주고 만든 두 가지 테스트 케이스를 모두 실행해보자.
두 가지 모두 성공했다. 이렇게 XML 방식도 알아보았고 성공적으로 데이터를 가져온 것도 확인했다.
'Hi Planner' 카테고리의 다른 글
[Hi Planner] @Builder 어노테이션 ( + 트러블 슈팅) (0) | 2022.06.01 |
---|---|
[Hi Planner] 메시지 가져오기(All elements are null 해결) (0) | 2022.05.29 |
[Hi Planner] 다른 일정 조회하기. (0) | 2022.05.26 |
[Hi Planner] login 화면 (0) | 2022.05.21 |
[intelliJ + gradle + spring boot] JSP 프로젝트 시작하기 (HiPlanner) (0) | 2022.05.13 |