지엉

Spring Boot - MyBatis를 이용한 DB 연결 본문

SpringBoot

Spring Boot - MyBatis를 이용한 DB 연결

지엉잉 2024. 2. 28. 13:47
특징
- 스프링부트의 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의 자동처리
    1. DataSource를 자동감지
    2. SqlSessionFactory 자동생성
    3. @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번 참고