MyBatis-Spring의 경우 Mapper 인터페이스와 XML을 동시에 이용할 수 있다.
XML 파일을 만들 때 이름에 대한 규칙은 없으나 가능하다면 Mapper 인터페이스와 같은 이름을 사용하는 것이 가독성을 높여준다.
XML 생성 시 MyBatis의 XML 매퍼에서 이용하는 태그에 대한 설정이 필요한데, 이는
https://mybatis.org/mybatis-3/configuration.html 에서 mapper 소스 복사 후 붙여넣고 사용할 SQL을 작성해야한다.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="XML의 주소값">
<select id="메서드 이름과 동일"
resultType="인터페이스에 선언된 리턴 타입과 동일하게 작성">
SELECT --- FROM 테이블
</select>
</mapper>
com.tech.mapper.TempMapper
인터페이스가 존재하고,<mapper namespace="com.tech.mapper.TempMapper">
와 같이 동일한 이름이 존재하면 이를 병합해서 처리하는 것.메서드 선언은 인터페이스에
SQL에 대한 처리는 XML을 이용하는 방식이다.
MyBatis는 내부적으로 JDBC의 PreparedStatement를 이용해서 SQL을 처리한다.
따라서 SQL에 전달되는 파라미터는 JDBC에서와 같이 '?'로 치환된다. 이때 값이 제대로 되었는지 확인하기 위해서는 log4jdbc-log4j2
라이브러리를 사용해야 한다.
log4jdbc-log4j2
라이브러리를 사용하는 방법
log4jdbc-log4j2
라이브러리 추가<!-- MyBatis는 내부적으로 PreparedStatement를 이용하여 SQL 처리,
?값의 처리를 확인하기 위한 라이브러리 추가 -->
<!-- https://mvnrepository.com/artifact/org.bgee.log4jdbc-log4j2/log4jdbc-log4j2-jdbc4 -->
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4</artifactId>
<version>1.16</version>
</dependency>
src/main/resources에 파일 추가
파일명 : log4jdbc.log4j2.properties
파일내용 : log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
JDBC 드라이버와 URL 정보 수정
<property name="driverClassName"
value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy"></property>
<property name="jdbcUrl"
value="jdbc:log4jdbc:oracle:thin:@localhost:1521:XE"></property>
태그는 메서드의 이름과 동일하게 작성한다.
resultType 속성은 인터페이스에 선언된 메서드의 리턴 타입과 동일하게 작성한다.
--인터페이스
public interface TimeMapper {
public String getTime();
}
public interface BoardMapper {
public List<BoardVO> getList();
}
--XML
<select id="getTime" resultType="string"> </select>
<select id="getList" resultType="org.zerock.domain.BoardVO"> </select>
<br>
<br>
> 코드로 배우는 스프링 웹 프로젝트 개정판