Spring과 MyBatis 연동

김주언·2022년 9월 2일
0

Spring

목록 보기
6/15
post-thumbnail

1. MyBatis

마이바티스 → SQL 매핑 프레임워크
JDBC 코드의 반복 작업을 줄여준다.

  • 자동으로 Connection close() 해준다
  • 내부적으로 PreparedStatement 처리
  • #{prop}의 형태로 속성 지정하여 내부적으로 자동 처리가능
  • 리턴 타입 지정 시 자동으로 객체 생성 및 ResultSet 처리

MyBatis 연동을 위해서 mybatis-spring 라이브러리를 사용한다,

1.1 MyBatis 관련 라이브러리 추가

  • spring-jdbc/spring-tx
  • mybatis/mybatis-spring

위 두가지 라이브러리를 pom.xml 에 추가한다.

 <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.10</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.7</version>
        </dependency>
        <dependency>
            <groupId>com.labun</groupId>
            <artifactId>spring-tx</artifactId>
            <version>5.2.2.RELEASE.patched</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.3.22</version>
        </dependency>

1.2 SQLSessionFactory

SQLSessionFactory : 내부적으로 SQLSession을 생성한다.
SQLSession을 통해 Connection을 생성 또는 원하는 SQL 전달하고 결과를 리턴 받는다.

root-context.xml에 빈을 추가해준다.

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>

    </bean>



2. 스프링과 연동

SQL을 처리하는 방식에 대한 설정을 별도로 분리하고 자동으로 처리되도록 하기 위해서 MyBatis의 Mapper를 작성한다.

Mapper는 SQL과 그에 대한 처리를 지정하는 역할을 수행한다. MyBatis-Spring 이용 시 Mapper를 XML과 인터페이스 + 어노테이션 형태로 작성 가능

2.1 Mapper 인터페이스

package com.example.springboard.mapper;

import org.apache.ibatis.annotations.Select;

public interface TimeMapper {
    @Select("SELECT sysdate FROM dual")
    public String getTime();
}

Mapper 작성 후 MyBatis 동작 시 Mapper 인식이 가능하도록 root-context.xml에 설정을 추가해줘야 한다.

    <mybatis-spring:scan base-package="com.example.springboard.mapper" />

테스트해보면 스프링은 인터페이스를 이용하여 객체를 생성할 수 있음을 확인할 수 있다.



3. log4jdbc-log4j2 설정

MyBatis는 내부적으로 JDBC의 PreparedStatement를 이용하여 SQL을 처리한다.
→ SQL에 전달되는 파라미터는 '?'로 치환됨

'?'가 어떤 값으로 처리되었는지 확인하기 위해서 라이브러리를 사용한다.

  1. pom.xml에 라이브러리를 추가한다.
     <!-- https://mvnrepository.com/artifact/org.bgee.log4jdbc-log4j2/log4jdbc-log4j2-jdbc4.1 -->
        <dependency>
            <groupId>org.bgee.log4jdbc-log4j2</groupId>
            <artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
            <version>1.16</version>
        </dependency>
<dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>2.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-jdk14</artifactId>
            <version>2.0.0</version>
        </dependency>
  1. 로그 설정 파일 추가
    src/main/resources 밑에 log4jdbc.log4j2.properties 파일 추가
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
  1. JDBC 연결 정보 수정
    root-context.xml 에서 hikariConfig
    1. driverClass value 수정
    2. jdbcUrl value 수정
    <bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
        <property name="driverClassName"
                  value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"></property>
        <property name="jdbcUrl"
                  value="jdbc:log4jdbc:oracle:thin:@//localhost:1521/XEPDB1"></property>
profile
학생 점심을 좀 차리시길 바랍니다

0개의 댓글