⚙️ Backend/스프링(Spring) Framework

스프링 - Oracle TimeMapper 예제

코너(Corner) 2021. 5. 7.
반응형

[Coding/스프링(Spring) Framework] - MAC / Windows 이클립스 스프링, 오라클 연동, 마이바티스, log4jdbc 라이브러리 사용하기

[Coding/스프링(Spring) Framework] - 스프링 - Oracle TimeMapper 예제

log4jdbc-log4j2 라이브러리 사용하기

TimeMapper 예제

com.koreait.mapper

package com.koreait.mapper;

import org.apache.ibatis.annotations.Select;

public interface TimeMapper {
        /*
         * SQL이 복잡하거나 길어지는 경우에는 어노테이션보다는 XML을 이용하는 방식을 더 선호하게 된다.
         * MyBatis-Spring의 경우 Mapper 인터페이스와 XML을 동시에 이용할 수 있다.
         */
    @Select("SELECT sysdate FROM dual")
    public String getTime();
        // result type이 String 

    public String getTime2();

}

root-context.xml

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
         <!-- 생성자 프로퍼티, dataSource 참조-->
        <property name="mapperLocations" value="classpath:/META-INF/com/koreait/mapper/**/*.xml"/>
        <property name="dataSource" ref="dataSource"/>
    </bean>

<mybatis-spring:scan base-package="com.koreait.mapper" /> <!--추가-->

namespace 체크

스프링 - Oracle  TimeMapper 예제 - undefined - namespace 체크

적용 후 나와서 update Maven

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="com.koreait.mapper.TimeMapper">
    <select id="getTime2" resultType="string">
    SELECT sysdate FROM dual
    </select>
</mapper>

TimeMapperTests.java

package com.koreait.persistence;

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 com.koreait.mapper.TimeMapper;

import lombok.Setter;
import lombok.extern.log4j.Log4j;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
//JAVA설정을 사용하는 경우
//@ContextConfiguration(classes= {RootConfig.class})
@Log4j
public class TimeMapperTests {
    /*
     MyBatis는 내부적으로 JDBC의 PreparedStatement를 이용해서 sql을 처리한다.
     따라서 SQL에 전달되는 파라미터는 JDBC에서와 같이 '?'로 치환되어 처리된다.
     복잡한 SQL의 경우 '?'로 나오는 값이 제대로 되었는 지 확인하기 쉽지 않고 실행된 SQL의
     내용을 정확히 확인하기 어렵기 때문에 log4jdbc-log4j2라이브러리를 사용하여 어떤 값인지를 
     정확히 확인한다.
     */


    @Setter(onMethod_=@Autowired)
    private TimeMapper timeMapper;

//    @Test
//    public void testGetTime() {
//        log.info("-----------getTime1 start------------");
//        log.info(timeMapper.getClass().getName());
//        log.info(timeMapper.getTime());
//        log.info("-----------getTime1 end------------");
//    }
//    
    @Test
    public void testGetTime2() {
        log.info("-----------getTime2 start------------");
        log.info(timeMapper.getTime2());
        log.info("-----------getTime2 end------------");
    }
}


log4jdbc-log4j2 적용

MyBatis는 내부적으로 JDBC의 PreparedStatement를 이용해서 sql을 처리한다.

따라서 SQL에 전달되는 파라미터는 JDBC에서와 같이 '?'로 치환되어 처리된다.

복잡한 SQL의 경우 '?'로 나오는 값이 제대로 되었는 지 확인하기 쉽지 않고 실행된 SQL의

내용을 정확히 확인하기 어렵기 때문에 log4jdbc-log4j2라이브러리를 사용하여 어떤 값인지를

정확히 확인한다.

ID와 PW를 노출하지 않기 위해

properties를 추가한다.

파일명 src/main/resources/log4jdbc.log4j2.properties

log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator

pom.xml 140번줄 쯤 dependecies 안에 추가

        <!-- https://mvnrepository.com/artifact/org.bgee.log4jdbc-log4j2 -->
        <dependency>
            <groupId>org.bgee.log4jdbc-log4j2</groupId>
            <artifactId>log4jdbc-log4j2-jdbc4</artifactId>
            <version>1.16</version>
        </dependency>

root-context.xml

기존 것을 아래코드와 같이 변경한다.

<property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"/>
<property name="jdbcUrl" value="jdbc:log4jdbc:oracle:thin:@localhost:1600:XE"/>

img

src/main/resources/log4j.xml 에서 ROOT Logger 바로 위에다 추가

    <logger name="jdbc.audit">
        <level value="warn" />
    </logger>

    <logger name="jdbc.resultset">
        <level value="warn" />
    </logger>

    <logger name="jdbc.connectiion">
        <level value="warn" />
    </logger>

이클립스 콘솔에서 보기 편하게 테이블 구조로 나오게 되는 것을 확인할 수 있다.

img


[Coding/스프링(Spring) Framework] - 스프링 - Oracle TimeMapper 예제]

 

스프링 - Oracle TimeMapper 예제

TimeMapper 예제 com.koreait.mapper package com.koreait.mapper; import org.apache.ibatis.annotations.Select; public interface TimeMapper { /* * SQL이 복잡하거나 길어지는 경우에는 어노테이션보다는 XML.....

iu-corner.tistory.com

[Coding/스프링(Spring) Framework] - MAC / Windows 이클립스 스프링, 오라클 연동, 마이바티스, log4jdbc 라이브러리 사용하기

 

MAC / Windows 이클립스 스프링, 오라클 연동, 마이바티스, log4jdbc 라이브러리 사용하기

스프링 오라클 연동 JDBCTests.java 생성 JDBC 연결 package com.koreait.persistence; import static org.junit.Assert.fail; import java.sql.Connection; import java.sql.DriverManager; import org.junit.Tes.....

iu-corner.tistory.com

[Coding/스프링(Spring) Framework] - MAC / Windows OS 스프링 STS 이클립스 Market Place 설치, 환경 설정

 

MAC / Windows OS 스프링 STS 이클립스 Market Place 설치, 환경 설정

[Coding/스프링(Spring) Framework] - 스프링 - 프레임 워크란? 특징, 장점, 라이브러리 개념 등 스프링 - 프레임 워크란? 특징, 장점, 라이브러리 개념 등 학습 목표 이 수업을 들으려면 할 줄 알아야하는...

iu-corner.tistory.com

](https://iu-corner.tistory.com/entry/MAC-Windows-OS-스프링-STS-이클립스-Market-Place-설치-환경-설정

 

MAC / Windows OS 스프링 STS 이클립스 Market Place 설치, 환경 설정

[Coding/스프링(Spring) Framework] - 스프링 - 프레임 워크란? 특징, 장점, 라이브러리 개념 등 스프링 - 프레임 워크란? 특징, 장점, 라이브러리 개념 등 학습 목표 이 수업을 들으려면 할 줄 알아야하는...

iu-corner.tistory.com

 

반응형