Spring Boot

Spring Boot DB (MyBatis)

0304호 2023. 2. 14.

MyBatis in Spring Boot

기존 스프링에서는 mybatis, mybatis-spring, spring-jdbc가 필요 했지만,

Spring Boot 에선 Mybatis-spring-boot-start를 이용하면 자동 설정 된다.

 

 

 

build_gradle에 mybatis-spring-boot-starter 라이브러리 추가

//Mybatis
	// https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter
	implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.2'

application-properties에 마이바티스 관련 설정 추가

##########마이바티스 관련 설정############
##매퍼xml의 위치 - classpath:/리소스 폴더의 하위를 나타냄
mybatis.mapper-locations=classpath:/mapper/*.xml

##단축명으로 사용할 클래스의 패키지명
mybatis.type-aliases-package=com.simple.basic.command

Spring Boot에서는 매퍼를 인식하려면 @Mapper어노테이션을 필수로 작성해 줘야한다

package com.simple.basic.mapper;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface TestMapper {

}

TestMapper.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.simple.basic.mapper.TestMapper">  
  	<select id="getTime" resultType="String">
  		select now()
  	</select>  
  </mapper>

Test클래스 생성

@SpringBootTest
public class MybatisTest {
	@Autowired
	TestMapper testMapper;
	
	@Test
	public void testCode01() {
		System.out.println(testMapper.getTime());
	}
}

SQL문  실행  로그  기능  더하기


SQL이  복잡해지면  구문적  에러를  찾기가  힘듭니다.
SQL로그를  출력  해두면  개발  환경에서  SQL을  사용하기  용이합니다. 


아래  블로그  참고
https://huelet.tistory.com/entry/Spring-boot-SQL-%EB%A1%9C%EA%B7%B8-%EC%84%A4%EC%A0%95Log4j2

 

Spring boot SQL 로그 설정(Log4j2)

콘솔창에서 쉽게 쿼리와 결과를 확인하고 싶을때. 보통 log4j를 많이 사용한다. 따라서 Spring boot 사용시 log4j 설정법을 기록해 둔다. Maven dependency 추가 org.bgee.log4jdbc-log4j2 log4jdbc-log4j2-jdbc4.1 1.16 DataC

huelet.tistory.com

1. dependency 추가
implementation 'org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4.1:1.16'

 


2. Database config 변경
spring.datasource.driverClassName=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

 


3. log4jdbc.log4j2.properties 생성  (resource폴더  아래)
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator 
log4jdbc.dump.sql.maxlinelength=0

 

공백이 들어있을 경우 적용이 안되므로 주의해서 입력할 것

 

4. logback.xml 설정  (resources폴더  아래)

<?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>

옵션설명


- jdbc.sqlonly : SQL문만을  로그로  남기며, PreparedStatement일  경우  관련된  argument 값으로  대체된  SQL문이  보여진다. 
- jdbc.sqltiming : SQL문과  해당  SQL을  실행시키는데  수행된  시간  정보(milliseconds)를  포함한다.
- jdbc.audit : ResultSet을  제외한  모든  JDBC 호출  정보를  로그로  남긴다. 
- jdbc.resultset : ResultSet을  포함한  모든  JDBC 호출  정보를  로그로  남긴다. 
- jdbc.resultsettable : SQL 결과  조회된  데이터의  table을   로그로  남긴다.

 


이후 실행하면 

이렇게 사용한 쿼리문을 로그로 찍어준다

'Spring Boot' 카테고리의 다른 글

Upload in Spring Boot  (2) 2023.02.21
Rest API  (1) 2023.02.16
Spring Boot Valiadation  (0) 2023.02.14
Thymeleaf in Spring Boot  (0) 2023.02.13
Spring Boot Lombok으로 Builder패턴 만들기  (0) 2023.02.13

댓글