지엉
Spring Boot - MyBatis를 이용한 DB 연결 본문
특징
- 스프링부트의 autoconfig기능은 데이터베이스 연결을 자동 처리한다.
- MyBatis를 이용해서 데이터베이스 연결을 처리할 예정이다.
- 기존 스프링에서는 mybatis, mybatis-spring, spring-jdbc가 필요했지만, 스프링 부트에서는 Mybatis-spring-boot-start를 이용하면 자동 설정된다.
Mybatis-spring-boot-start
- MyBatis-Spring-Boot-Starter를 사용하면 스프링 부트 위에 MyBatis 애플리케이션을 빠르게 빌드할 수 있음
- @Mapper만 사용하여 인터페이스 위치만 알려주면 자동 처리된다!(좋다!)
- 단, application.properties에 데이터베이스 연결 설정이 필수가 된다.
- MyBatis-Spring-Boot-Starter의 자동처리
- DataSource를 자동감지
- SqlSessionFactory 자동생성
- @Mapper 어노테이션을 스캔하고 자동연결
부트에 Mybatis설정하기
- 스프링부트 버전레벨에 맞춰준다
- Boot 2 버전 == mybatis 2버전
1. build.gradle 파일
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.3.0'
2. application.properties 파일에 DB연결 추가
# mybatis 데이터베이스 개발환경
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/spring?serverTimezone=Asia/Seoul
spring.datasource.username=spring
spring.datasource.password=spring
- 여기서 spring.datasoutce.url 속 spring?은 데이터베이스명이다
3. application.properties 파일에 패키지명 추가, SQL mapper 위치 추가
# 엘리어스로 사용할 패키지명
mybatis.type-aliases-package=com.simple.basic.command
# SQL mapper위치
mybatis.mapper-locations=classpath:/mapper/**/*.xml
- vo의 경로를 지정하면 mapper에서 클래스이름으로 단축명을 사용가능
- classpath:/ 는 리소스 폴더 아래의 경로를 의미함
참고
더보기

패키지명에 맞게, sql mapper의 위치에 맞게 설정

이걸 체크

혹시! xml 파일에서 오류가 난다면(dtd에서 빨간줄이 나는 경우)
window > perfrences > maven

잠시 테스트를 해보자
더보기


이렇게 다 맞춰줬을 때, test를 돌린다면 문제없이 가동된다!
test를 해보면, DB연결에 성공했다!
+ 번외
마이바티스 실행 로그 기능 더하기
- SQL이 복잡해지면 구문적 에러를 찾기가 힘든데,
- SQL로그를 출력 해두면 개발 환경에서 SQL을 사용하기 용이하다
1. dependency 추가
- build.gradle파일
// SQL 로그
implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16'
2. Database Config 변경
- application.properties 파일(기존 환경설정은 주석처리)
# mybatis 데이터베이스 로그기능
spring.datasource.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
spring.datasource.url=jdbc:log4jdbc:mysql://localhost:3306/spring?serverTimezone=Asia/Seoul
spring.datasource.username=spring
spring.datasource.password=spring
# mybatis 데이터베이스 개발환경(기존의 환경은 주석처리)
#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#spring.datasource.url=jdbc:mysql://localhost:3306/spring?serverTimezone=Asia/Seoul
#spring.datasource.username=spring
#spring.datasource.password=spring
3. resource 폴더 하위에 log4jdbc.log4j2.properties 생성 후 설
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
log4jdbc.dump.sql.maxlinelength=0
4. resource 폴더 하위에 logback.xml 생성 후 설정
- jdbc.sqlonly : SQL문만을 로그로 남기며, PreparedStatement일 경우 관련된 argument 값으로 대체된 SQL문이 보여진다.
- jdbc.sqltiming : SQL문과 해당 SQL을 실행시키는데 수행된 시간 정보(milliseconds)를 포함한다.
- jdbc.audit : ResultSet을 제외한 모든 JDBC 호출 정보를 로그로 남긴다.
- jdbc.resultset : ResultSet을 포함한 모든 JDBC 호출 정보를 로그로 남긴다.
- jdbc.resultsettable : SQL 결과 조회된 데이터의 table을 로그로 남긴다.
level="ON"으로 바꾸면, 로그를 볼 수 있다
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyyMMdd HH:mm:ss.SSS} [%thread] %-3level %logger{5} - %msg %n</pattern>
</encoder>
</appender>
<logger name="jdbc" level="OFF"/>
<logger name="jdbc.sqlonly" level="OFF"/>
<logger name="jdbc.sqltiming" level="DEBUG"/>
<logger name="jdbc.audit" level="OFF"/>
<logger name="jdbc.resultset" level="OFF"/>
<logger name="jdbc.resultsettable" level="DEBUG"/>
<logger name="jdbc.connection" level="OFF"/>
<root level="INFO">
<appender-ref ref="STDOUT" />
</root>
</configuration>
3번, 4번 참고
'SpringBoot' 카테고리의 다른 글
Spring Boot - 유효성 검사 (0) | 2024.02.27 |
---|---|
Spring Boot - 타임리프 include문법 (0) | 2024.02.27 |
Spring Boot - 타임리프(Thymeleaf) 문법 (1) | 2024.02.27 |
Spring Boot - 기본 설정하기, lombok, Thymeleaf 사용하기 (0) | 2024.02.26 |
Spring Boot - 다운하기, 프로젝트 생성하기 (2) | 2024.02.26 |