MyBatis의 특징

  • 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>

  • MyBatis는 Mapper 인터페이스와 XML을
    인터페이스의 이름과 namespace 속성값(XML의 주소값이 해당됨)을 가지고 판단한다.
    즉, com.tech.mapper.TempMapper 인터페이스가 존재하고,
    XML의 <mapper namespace="com.tech.mapper.TempMapper">와 같이 동일한 이름이 존재하면 이를 병합해서 처리하는 것.
  • 메서드 선언은 인터페이스
    SQL에 대한 처리는 XML을 이용하는 방식이다.

  • MyBatis는 내부적으로 JDBC의 PreparedStatement를 이용해서 SQL을 처리한다.
    따라서 SQL에 전달되는 파라미터는 JDBC에서와 같이 '?'로 치환된다. 이때 값이 제대로 되었는지 확인하기 위해서는 log4jdbc-log4j2 라이브러리를 사용해야 한다.


    log4jdbc-log4j2 라이브러리를 사용하는 방법

  1. pom.xml에 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>
  1. src/main/resources에 파일 추가
    파일명 : log4jdbc.log4j2.properties
    파일내용 : log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator

  2. 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>

> 코드로 배우는 스프링 웹 프로젝트 개정판

0개의 댓글