마이바티스 → SQL 매핑 프레임워크
JDBC 코드의 반복 작업을 줄여준다.
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>
SQLSessionFactory : 내부적으로 SQLSession을 생성한다.
SQLSession을 통해 Connection을 생성 또는 원하는 SQL 전달하고 결과를 리턴 받는다.
root-context.xml에 빈을 추가해준다.
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
</bean>
SQL을 처리하는 방식에 대한 설정을 별도로 분리하고 자동으로 처리되도록 하기 위해서 MyBatis의 Mapper를 작성한다.
Mapper는 SQL과 그에 대한 처리를 지정하는 역할을 수행한다. MyBatis-Spring 이용 시 Mapper를 XML과 인터페이스 + 어노테이션 형태로 작성 가능
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" />
테스트해보면 스프링은 인터페이스를 이용하여 객체를 생성할 수 있음을 확인할 수 있다.
MyBatis는 내부적으로 JDBC의 PreparedStatement를 이용하여 SQL을 처리한다.
→ SQL에 전달되는 파라미터는 '?'로 치환됨
'?'가 어떤 값으로 처리되었는지 확인하기 위해서 라이브러리를 사용한다.
<!-- 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>
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
<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>