-MyBatis는 내부적으로 JDBC PreparedStatement 를 이용해서 SQL을 처리한다.
따라서 SQL에 전달되는 파라미터는 JDBC에서와 같이 ? 로 치환되어 처리된다.
복잡한 SQL의 경우 ? 로 나오는 값이 제대로 되었는지 확인하기 어렵기 때문에
이런 문제를 해결 하기 위해 PreparedStatement에 사용된 ? 가 어떤 값으로 처리되었는지 확인하는 기능을 추가해 주도록 한다.
SQL로그를 제대로 보기 위해서는 log4jdbc-log4j2라이브러리를 사용한다.
pom.xml을 수정해 준다.
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4</artifactId>
<version>1.16</version>
</dependency>
1. 로그 설정 파일을 추가
2. JDBC 연결 정보 수정
1.
src/main/resource 밑에 log4jdbc.log4j2.properties
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegat
2.
log4jdbc를 이용하는 경우 JDBC드라이버와 URL정보를 수정 해야한다.
root-context.xml 일부를 아래와 같이 수정한다.
기존의 코드는 주석처리하고 작성해 주었다.
<property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"></property>
<property name="jdbcUrl" value="jdbc:log4jdbc:oracle:thin:@localhost:1521:XE"></property>
이전과 달리 JDBC와 관련된 로그들이 출력됨을 볼 수 있다.

Java 설정을 이용하는 경우 같은내용을 RootConfig 클래스에 아래와같이 반영한다.
주석을 치고 아래와 같이 작성 하였다.
package org.zerock.config;
import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
@Configuration
@ComponentScan(basePackages = {"org.zerock.sample"})
@MapperScan(basePackages = {"org.zerock.mapper"})
public class RootConfig {
@Bean
public DataSource dataSource() {
HikariConfig hikariConfig = new HikariConfig();
// hikariConfig.setDriverClassName("oracle.jdbc.driver.OracleDriver");
// hikariConfig.setJdbcUrl("jdbc:oracle:thin:@localhost:1521:XE");
hikariConfig.setDriverClassName("net.sf.log4jdbc.sql.jdbcapi.DriverSpy");
hikariConfig.setJdbcUrl("jdbc:log4jdbc:oracle:thin:@localhost:1521:XE");
hikariConfig.setUsername("book_ex");
hikariConfig.setPassword("book_ex");
HikariDataSource dataSource = new HikariDataSource(hikariConfig);
return dataSource;
}
@Bean
public SqlSessionFactory sqlSessionFactory() throws Exception{
SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
sqlSessionFactory.setDataSource(dataSource());
return (SqlSessionFactory) sqlSessionFactory.getObject();
}
}
로그 레벨의 설정
이렇게 하면 로그가 너무 많이 나오기 때문에 로그이 레벨을 이용해서 조금 수정을 해준다.
src/test/resource 밑에 log4.xml 을 이용한다.
<logger name="jdbc.audit">
<level value="warn" />
</logger>
<logger name="jdbc.resultset">
<level value="warn" />
</logger>
<logger name="jdbc.connection">
<level value="warn" />
</logger>
기존의 로그는 info레벨이기 때문에 warn과 같이 좀더 높은 레벨의 로그만 기록하게 수정하면 테스트코드를 실행할때
이전에 비해 로그의 양이 줄어든다.

'web' 카테고리의 다른 글
| 코드로 배우는 스프링웹프로젝트 - 06 스프링 MVC의 Controller (1) | 2020.10.19 |
|---|---|
| 코드로 배우는 스프링 웹프로젝트 -스프링 MVC의 기존 구조 (0) | 2020.10.05 |
| 코드로 배우는 스프링 웹프로젝트 - 스프링과의 연동처리 (0) | 2020.09.30 |
| 코드로 배우는 스프링 웹프로젝트 - 04 MyBatis와 스프링 연동 (0) | 2020.09.30 |
| 코드로 배우는 스프링웹프로젝트 -JDBC테스트코드 (0) | 2020.09.29 |