Jam's story

[Spring] MyBatis 본문

Spring

[Spring] MyBatis

애플쩀 2022. 7. 25. 02:43

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️⃣

Comments