Spring Framework11,12,13(Mybatis연결)

유성훈·2023년 2월 11일
0

Spring Framework공부

목록 보기
6/7

📌폴더 구조






📌Mybatis연결(JDBC,JBCP연결 과정)

📍src/main/webapp/WEB-INF/spring/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"
xsi:schemaLocation="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 -->
	<!-- 해당 패키지에서 component 어노테이션 스캔이 가능해진다. -->
	<!-- Component어노테이션이 붙어있는 것을 참조해서 메모리에 올려주기 위해ㅑ 경로를 알려주는 작업??-->
	<context:component-scan base-package="com.ysh.studySpring.dependency"></context:component-scan>
	<!-- hikariConfig라는 객체를 만드는 과정 -->
	<!-- xml에는 서버쪽으로 데이터를 전달하기 위해 작성하는 것? -->
	<!-- XML에서 객체를 만드는 방법 (자바에서 만들수도 있지만 xml에서 만드는 것이 더 단단한다) -->
	<!-- com.zaxxer.hikari.HikariConfig 객체를 hikariConfig라는 이름으로 사용하겠다 -->
	<!-- hikari는 라이브러리로 xml에서도 의존성 주입 필요 -->
	<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
		<!-- class안에 값(필드)를 넣어줄때는 property를 사용한다 -->
		<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
		<property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:XE"/>
		<property name="username" value="hr"/>
		<property name="password" value="hr"/>   <!-- value에 직성히면 해당 값으로 변경된다 -->
	</bean>
	<!-- 위에서 만든 객체를 datasource라는 객체에 전달을 해주어야 사용이 가능한다. -->
	<!-- destroy=method="close" ==> 해당 커넥션 객체를 반납한다는 의미 (중요 X) -->
	<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
	<!-- 사용할 생성자를 불러와 해당 생성자에 사용할 값을 넣어주는 작업  (생성자를 불러오는 것 : arg, reg:참조)-->
	<constructor-arg ref="hikariConfig"/>
	</bean>
</beans>
<!--  하단 NameSpaces -> conxtext체크 -->
📍src/main/webapp/WEB-INF/views/home.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page session="false"%>
<html>
<head>
<title>Home</title>
</head>
<body>
<h1>Hello world!</h1>
<P>The time on the server is ${serverTime}.</P>
</body>
</html>
📍package dependency.Persisitence;
import static org.junit.Assert.fail;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.log;
import java.sql.Connection;
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 lombok.extern.log4j.Log4j;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
@Log4j
public class DataSourceTests {
	@Autowired
	private DataSource dataSource;
	@Test
	public void testConnection() {
		try(Connection connection = dataSource.getConnection()){
			log.info(connection);
		}catch(Exception e) {
			fail(e.getMessage());
		}
	}
}
📍package dependency.Persisitence;
import static org.junit.Assert.fail;
import java.sql.Connection;
import java.sql.DriverManager;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import lombok.extern.log4j.Log4j;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
@Log4j
public class JDBC_Tests {
	//해당 드라이버를 메모리에 올리는 코드, Oracle DB를 사용했을 경우  
	static {
		try {
			Class.forName("orcle.jdbc.driver.OracleDriver");
		}catch(ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	//위해서 해당 메모리를 할당해주고 해당 주소를 적어주면 연결된다??
	@Test
	private void testConnection() {
		//외부 장치를 열었으면 자동으로 닫아주는 코드
		try(Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE", "hr", "hr")){
			log.info(connection);
		}catch(Exception e) {
			//junit의 메소드로 무조건 실패로 처리한 뒤 실행을 중지한다.
			fail(e.getMessage());
		}
	}
}

✏️부가 설명(MyBatis 연결 - jdbc, dbcp연결)

1. 프로젝트 우클릭 buildpath -> 라이브러리 -> 오라클 JDBC.jar파일 추가(class path에 추가)
2.jdbc가 연결 되었는지 확인
DBMS작업은 영속적이기 때문에 persistence영역이라고 한다.
JDBC, DBCP를 연결" 하는 작업



📌Mybatis설정(SqlSession,mapper / interface(자바),xml에서 쿼리문 작성해서 사용하는 예시)

📍package mapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
//Mapper 인터페이스 
//SQL을 작성하는 작업은 xml을 이용할 수도 있지만 , 최소한의 코드를 작성하기 위해서는 
//Mapper인터페이스를 작성한다.\
//@Mapper를 사용하기 위해서는 스캔이 필요하다(root-coiontext.xml -> nameSpace -> mybatis-spring 체크 + 코드 작성 필요)
@Mapper //xml과 연동하기 위한 어노테이션
public interface TimeMapper {
	//현재 db에 테이블이 없기 대문에 DB에 있는 데이터를 불러오는 것이 아니라 현재 시간을 불러오는 예시
	//java코드 내에서 쿼리 실행 가능 / 간단한 것은 여기에 작성하고 복잡한 쿼리문은 xml에 작성해라!!
	@Select("SELECT SYSDATE FROM DUAL")
	public String getTime(); //getRime이 실행되면 위의 쿼리가 실행된다.
	//위처럼 직접 쿼리를 작성하는 것이 아니라 xml에 있는 쿼리를 받아와 사용하는 방법
	public String getTime2();
}
📍src/main/resources/com/ysh/studySpring/mapper/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">
<!-- 여기서 작성된 xml코드는 namespace와 연결이 된다. -->
<mapper namespace="com.ysh.studySpring.mapper.TimeMapper"> <!-- 연결할 경로를 알려주어야 한다 -->
<select id="getRime2" resultType="string"> <!-- java interface의 사용할 메소드의 이름과 동일하게 만든다 -->
	SELECT SYSDATA FROM DUAL
</select> 
</mapper>
📍src/main/webapp/WEB-INF/spring/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 -->
    <!-- 해당 패키지에서 component 어노테이션 스캔이 가능해진다. -->
	<!-- Component어노테이션이 붙어있는 것을 참조해서 메모리에 올려주기 위해ㅑ 경로를 알려주는 작업??-->
	<context:component-scan base-package="com.ysh.studySpring.dependency"></context:component-scan>
	<!-- hikariConfig라는 객체를 만드는 과정 -->
	<!-- xml에는 서버쪽으로 데이터를 전달하기 위해 작성하는 것? -->
	<!-- XML에서 객체를 만드는 방법 (자바에서 만들수도 있지만 xml에서 만드는 것이 더 단단한다) -->
	<!-- com.zaxxer.hikari.HikariConfig 객체를 hikariConfig라는 이름으로 사용하겠다 -->
	<!-- hikari는 라이브러리로 xml에서도 의존성 주입 필요 -->
	<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
		<!-- class안에 값(필드)를 넣어줄때는 property를 사용한다 -->
		<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
		<property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:XE"/>
		<property name="username" value="hr"/>
		<property name="password" value="hr"/>   <!-- value에 직성히면 해당 값으로 변경된다 -->
	</bean>
	<!-- 위에서 만든 객체를 datasource라는 객체에 전달을 해주어야 사용이 가능한다. -->
	<!-- destroy=method="close" ==> 해당 커넥션 객체를 반납한다는 의미 (중요 X) -->
	<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
	<!-- 사용할 생성자를 불러와 해당 생성자에 사용할 값을 넣어주는 작업  (생성자를 불러오는 것 : arg, reg:참조)-->
	<constructor-arg ref="hikariConfig"/>
	</bean>
	<!-- sqlsession factroy 객체를 만드는 과정 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
	</bean>
	<!-- Maper어노테이션을 사용하기 위해 스캔이 가능하도록 하는 코드 / namespaces -> mybatis-spring체크 -->
	<!-- com.ysh.mapper에 있는 mapper 어노테이션을 스캔가능하다 -->
	<mybatis-spring:scan base-package="com.ysh.studySpring.mapper" />
</beans>
<!--  하단 NameSpaces -> conxtext체크 -->
📍package dependency.Persisitence;
import static org.junit.Assert.fail;
import java.sql.Connection;
import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
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 lombok.extern.log4j.Log4j;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
@Log4j
public class DataSourceTests {
	@Autowired
	private DataSource dataSource;
	@Autowired
	private SqlSessionFactory sqlSessionFactory;
//	@Test
//	public void testConnection() {
//		try(Connection connection = dataSource.getConnection()){
//			log.info(connection);
//		}catch(Exception e) {
//			fail(e.getMessage());
//		}
//	}
	//sqlSessionFactory를 통해 connection객체를  가지고 오는지 확인하는 테스트(mapper쪽에서 기본적인 세팅 완료)
	@Test
	public void testConnection() {
    try
		(		//true를 사용해야 auto commit이 된다
			SqlSession sqlSession = sqlSessionFactory.openSession(true);
				Connection connection = sqlSession.getConnection();
		){
		 log.info(sqlSession);
		 log.info(connection);
		}catch(Exception e) {
			fail(e.getMessage());
		}
	}
}
📍package dependency.mapper;
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 lombok.extern.log4j.Log4j;
import mapper.TimeMapper;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
@Log4j
public class TimeMapperTests {
	@Autowired
	private TimeMapper timeMapper;
	@Test
	public void testGetTime() {
		log.info(timeMapper.getClass().getName());
		log.info(timeMapper.getTime());
	}
	@Test
	public void testGetTime2() {
		log.info(timeMapper.getClass().getName());
		log.info(timeMapper.getTime2());
	}
}
📍target/classes/com/ysh/studySpring/mapper/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">
<!-- 여기서 작성된 xml코드는 namespace와 연결이 된다. -->
<mapper namespace="com.ysh.studySpring.mapper.TimeMapper"> <!-- 연결할 경로를 알려주어야 한다 -->
<select id="getRime2" resultType="string"> <!-- java interface의 사용할 메소드의 이름과 동일하게 만든다 -->
	SELECT SYSDATA FROM DUAL
</select> 
</mapper>

✏️부가설명(Mybatis 연결 - SqlSession, Mapper)

  • 쿼리문을 왔다갔다 하면서 사용하기 힘들다, 기존 java파일에서 섞어서 사용하는 것이 좋지 않아 xml로 분리해서 기존에 java파일에서 섞어서 했던 jdbc를 열어 놓고 반납을 하는 방법이 dbcp connectionful이다.
  • Mybatis : 자바에 sql코드가 섞여 있으니까 보기 싫기 때문에 분리 하는 개념 -> sql은 전부 xml에 넣는다. xml에 있는 것을 java쪽 interface와 연결을 해서 가지고 온다.
    구조에 대한 이해
    • sql(xml)
    • java(interface) : 처음에는 구현이 되어 있지 않은데 xml에 있는 sql이 쿼리문이 실행이 되면서 구현이 된다(사용자가 java의 interface를 실행하면 해당 interface에 바인딩이 된 xml에 있는 sql이 실행이 된다) / 이러한 interface를 mapper라고 부른다(sql과 연결되어 있는 것)
      xml에 파일을 만드는 방법
    1. 경로를 따로 지정도 가능하지만 우선 default경로로 사용(기본 경로) - xml경로를 interface경로와 동일하게 맞추어 폴더를 만들어 주는 것이 기본이다. / xml파일은 resources부터 찾는다(기본으로 설정이 되어있다.)
      1) src/main/resource -> com package생성 -> ysh package생성 -> studySpring package생성 -> mapper package생성 ->xml파일 생성
      (interface 패키지 경로와 동일한 경로로 찾기 때문에 맞추어 주어야 한다)
      2)Mybatis Mapper Default Code(마이바티스에서 매퍼를 사용할 경우 기본적으로 작성해야 하는 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="">
      </mapper>



📌Mybatis연결(Log4j, 경로설정 / 콘솔에 테이블로 보기 좋게 보여주도록 하는 설정)

📍src/main/resources/config/config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0/EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
</configuration>
📍src/main/resources/log4j.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<!-- log에 대한 경고 level을 관리하는 파일 -->
<!-- 직접 설정 하면 콘솔에 보여주는 경고를 줄일수도 늘릴수도 있다. -->
	<!-- Appenders -->
	<appender name="console" class="org.apache.log4j.ConsoleAppender">
		<param name="Target" value="System.out" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%-5p: %c - %m%n" />
		</layout>
	</appender>
	<!-- Application Loggers -->
	<logger name="com.ysh.studySpring">
		<level value="info" />
	</logger>
	<!-- 3rdparty Loggers -->
	<logger name="org.springframework.core">
		<level value="info" />
	</logger>
	<logger name="org.springframework.beans">
		<level value="info" />
	</logger>
	<logger name="org.springframework.context">
		<level value="info" />
	</logger>
	<logger name="org.springframework.web">
		<level value="info" />
	</logger>
	<!-- 일반정보는 말고 경고만 보여줘라 -->
	<logger name="jdbc.audit">
		<level value="warn"/>
	</logger>
	<logger name="jdbc.connection">
		<level value="warn"/>
	</logger>
	<logger name="jdbc.audit">
		<level value="warn"/>
	</logger>
	<!-- Root Logger -->
	<root>
		<priority value="warn" />
		<appender-ref ref="console" />
	</root>
</log4j:configuration>
📍src/main/resources/log4jdbc.log4j2.propertis
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
//왼쪽을 오른쪽 으로 이름을 변경한다.
//log라이브러리의 설정을 여기서 바꿀 예정
//라이브러리가 위의 이름을 일고 실행 된다.
//ctrl + n -> general -> untyped text로 만드낟
📍src/main/webapp/WEB-INF/spring/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 -->
	<!-- 해당 패키지에서 component 어노테이션 스캔이 가능해진다. -->
	<!-- Component어노테이션이 붙어있는 것을 참조해서 메모리에 올려주기 위해ㅑ 경로를 알려주는 작업??-->
	<context:component-scan base-package="com.ysh.studySpring.dependency"></context:component-scan>
	<!-- hikariConfig라는 객체를 만드는 과정 -->
	<!-- xml에는 서버쪽으로 데이터를 전달하기 위해 작성하는 것? -->
	<!-- XML에서 객체를 만드는 방법 (자바에서 만들수도 있지만 xml에서 만드는 것이 더 단단한다) -->
	<!-- com.zaxxer.hikari.HikariConfig 객체를 hikariConfig라는 이름으로 사용하겠다 -->
	<!-- hikari는 라이브러리로 xml에서도 의존성 주입 필요 -->
	<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
		<!-- class안에 값(필드)를 넣어줄때는 property를 사용한다 -->
      <!-- 	<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
		<property name="jdbcUrl" value="jdbc:oracle:thin:@localhost:1521:XE"/>     -->
		<!--기존과 차이점 driver와 그냥 연결되었던것에 반해 log를 통해 연결이 된다  -> 콘솔에 테이블 형식으로 보기 좋게 보여준다.-->
		<property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy" /> <!--  ?로 보여주는 것을 데이터러 보여주기 위해 수정 -->
		<property name="jdbcUrl" value="jdbc:log4jdbc:oracle:thin:@localhost:1521:XE"/>  
		<property name="username" value="hr"/>
		<property name="password" value="hr"/>   <!-- value에 직성히면 해당 값으로 변경된다 -->
	</bean>
	<!-- 위에서 만든 객체를 datasource라는 객체에 전달을 해주어야 사용이 가능한다. -->
	<!-- destroy=method="close" ==> 해당 커넥션 객체를 반납한다는 의미 (중요 X) -->
	<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
	<!-- 사용할 생성자를 불러와 해당 생성자에 사용할 값을 넣어주는 작업  (생성자를 불러오는 것 : arg, reg:참조)-->
	<constructor-arg ref="hikariConfig"/>
	</bean>
	<!-- sqlsession factroy 객체를 만드는 과정 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<!-- 위치를 정하는 코드 / 경로에 mappers라는 폴더를 만드는데 어떤 하위경로든 Mapper.xml로 끝나는 파일을 찾아라 -->
		<property name="mapperLocations" value="classpath:mappers/**/*Mapper.xml" />
		<property name="configLocation" value="classpath:config/config.xml"/>
	</bean>
	<!-- Maper어노테이션을 사용하기 위해 스캔이 가능하도록 하는 코드 / namespaces -> mybatis-spring체크 -->
	<!-- com.ysh.mapper에 있는 mapper 어노테이션을 스캔가능하다 -->
	<mybatis-spring:scan base-package="com.ysh.studySpring.mapper" />
</beans>
<!--  하단 NameSpaces -> conxtext체크 -->
📍target/classes/config/config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0/EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
</configuration>
📍target/classes/log4j.xml
?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<!-- log에 대한 경고 level을 관리하는 파일 -->
<!-- 직접 설정 하면 콘솔에 보여주는 경고를 줄일수도 늘릴수도 있다. -->
	<!-- Appenders -->
	<appender name="console" class="org.apache.log4j.ConsoleAppender">
		<param name="Target" value="System.out" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%-5p: %c - %m%n" />
		</layout>
	</appender>
	<!-- Application Loggers -->
	<logger name="com.ysh.studySpring">
		<level value="info" />
	</logger>
	<!-- 3rdparty Loggers -->
	<logger name="org.springframework.core">
		<level value="info" />
	</logger>
	<logger name="org.springframework.beans">
		<level value="info" />
	</logger>
	<logger name="org.springframework.context">
		<level value="info" />
	</logger>
	<logger name="org.springframework.web">
		<level value="info" />
	</logger>
	<!-- 일반정보는 말고 경고만 보여줘라 -->
	<logger name="jdbc.audit">
		<level value="warn"/>
	</logger>
	<logger name="jdbc.connection">
		<level value="warn"/>
	</logger>
	<logger name="jdbc.audit">
		<level value="warn"/>
	</logger>
	<!-- Root Logger -->
	<root>
		<priority value="warn" />
		<appender-ref ref="console" />
	</root>
</log4j:configuration>
📍target/classes/log4jdbc.log4j2.propertis
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
//왼쪽을 오른쪽 으로 이름을 변경한다.
//log라이브러리의 설정을 여기서 바꿀 예정
//라이브러리가 위의 이름을 일고 실행 된다.
//ctrl + n -> general -> untyped text로 만드낟

✏️부가설명(13강 - Log4j, 경로 설정)

  • log4j가 jdbc에 관여 해서 결과를 콘솔에 출력해주는 기능을 사용할 예정(DB결과가 콘솔에 보이게 하기 위한 작업)
  • log4j_spy라이브러리를 사용
  • Mybatis는 내부적으로 JDBC의 PreparedStatement를 이용해서 SQL을 처리한다.
  • 따라서 SQL에 전달되는 파라미터는 JDBC에서 와 같이 '?'로 치환 되어 처리 된다.
  • 복잡한 SQL의 경우 '?'로 나오는 값이 제대로 되었는지 확인하기 쉽지 않다.
  • 실행된 SQL위 내용을 정확히 확인하기 어렵기 때무에 log4jdbc-log4j2라이브로리를 가용하여 어떤값인지 정확하게 확인한다.
  • src/main/resources에 새 파일을 만든다. -> general/untyped Text로 만든다
(config.xml의 default 코드이다)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0/EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
</configuration>
profile
프로그래밍 공부

0개의 댓글