Jam's story
[Spring] MyBatis 본문
1️⃣pom.xml
<!-- myBatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- myBatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
2️⃣root-context.xml
<!-- p 91 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- p 95 -->
<mybatis-spring:scan base-package="org.zerock.mapper"/>
3️⃣ TimeMapper인터페이스
package org.zerock.mapper;
import org.apache.ibatis.annotations.Select;
// p 94 NoticeDao.java 인터페이스
public interface TimeMapper {
@Select("SELECT sysdate FROM dual")
public String getTime(); // 매퍼 XML 파일 X
public String getTimeXML(); // TimeMapper.xml 연동
}
4️⃣TimeMapper.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="org.zerock.mapper.TimeMapper">
<select id="getTimeXML" resultType="string">
SELECT sysdate + 5
FROM dual
</select>
</mapper>
5️⃣root-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
xsi:schemaLocation="http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- Root Context: defines shared resources visible to all other web components -->
<!-- p 58 -->
<context:component-scan base-package="org.zerock.sample" />
<!-- p 84 -->
<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
<!-- mybatis 로그처리 -->
<property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"></property>
<property name="jdbcUrl" value="jdbc:log4jdbc:oracle:thin:@localhost:1521:xe"></property>
<!-- p.102 log4jdbc-log4j2 설정 때문에 변경
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>
<property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:xe"></property>
-->
<property name="username" value="scott"></property>
<property name="password" value="tiger"></property>
</bean>
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
<constructor-arg ref="hikariConfig"></constructor-arg>
</bean>
<!-- p 91 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- p 95 -->
<mybatis-spring:scan base-package="org.zerock.mapper"/>
</beans>
6️⃣TimeMapperTest.java
package org.zerock.persistence;
import static org.junit.Assert.*;
import java.sql.Connection;
import java.sql.DriverManager;
import javax.management.timer.TimerMBean;
import javax.sql.DataSource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.zerock.mapper.TimeMapper;
import lombok.Setter;
import lombok.extern.log4j.Log4j;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
@Log4j
public class TimeMapperTests {
@Setter(onMethod_ = { @Autowired })
private TimeMapper timeMapper;
// p 97
@Test
public void testGetTime() {
log.info( timeMapper.getClass().getName() );
log.info( timeMapper.getTime() );
// INFO : org.zerock.persistence.TimeMapperTests - 2022-07-25 11:38:23
// 오늘 날짜 + 5일
log.info( timeMapper.getTimeXML() );
// INFO : org.zerock.persistence.TimeMapperTests - 2022-07-30 11:47:47
}
}
log4jdbc-log4j2
PreparedStatment에 사용된 ?가 어떤 값으로 처리되었는지 확인하는 기능
1️⃣pom.xml
<!-- p 101 -->
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4</artifactId>
<version>1.16</version>
</dependency>
2️⃣root-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"
xsi:schemaLocation="http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring-1.2.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- Root Context: defines shared resources visible to all other web components -->
<!-- p 58 -->
<context:component-scan base-package="org.zerock.sample" />
<!-- p 84 -->
<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
<!-- mybatis 로그처리 -->
<property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"></property>
<property name="jdbcUrl" value="jdbc:log4jdbc:oracle:thin:@localhost:1521:xe"></property>
<!-- p.102 log4jdbc-log4j2 설정 때문에 변경
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"></property>
<property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:xe"></property>
-->
<property name="username" value="scott"></property>
<property name="password" value="tiger"></property>
</bean>
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
<constructor-arg ref="hikariConfig"></constructor-arg>
</bean>
<!-- p 91 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- p 95 -->
<mybatis-spring:scan base-package="org.zerock.mapper"/>
</beans>
3️⃣log4.xml에 추가 (로그의 레벨설정) 로그의 레벨을 낮추어 출력되는 로그 양 줄이기
<!-- Root Logger -->
<root>
<priority value="info" />
<appender-ref ref="console" />
</root>
<!-- p 105 -->
<logger name="jdbc.audit">
<level value="warn" />
</logger>
<logger name="jdbc.resultset">
<level value="warn" />
</logger>
<logger name="jdbc.connection">
<level value="warn" />
</logger>
4️⃣
5️⃣6️⃣
'Spring' 카테고리의 다른 글
[게시판 프로젝트] GitKraken + API 설계 (0) | 2022.08.04 |
---|---|
[게시판 프로젝트] 요구사항 (0) | 2022.08.03 |
[Spring] 스프링 5.0 의존성주입 (0) | 2022.07.24 |
[Spring] Spring과 MyBatis (0) | 2022.07.22 |
[Spring] 스프링시큐리티 - 로그인 (0) | 2022.07.21 |
Comments