파게로그

[Persistence Framework] MyBatis의 XML을 이용한 매핑 본문

콤퓨타 왕기초/Spring Boot

[Persistence Framework] MyBatis의 XML을 이용한 매핑

파게 2021. 5. 11. 02:22

annotation을 이용해 SQL을 매핑할 경우...

 

1. 규모가 커지게 되면 너무 복잡해진다.

2. 인터페이스인 AssignmentDao가, MyBatis라는, 구현을 위한 특정 기술과 너무 밀접해진다.

3. annotation 때문에 인터페이스 전반에 대한 가독성이 나빠진다.

 

인터페이스에는 메서드만 남겨놓고, resources에서 원하는 위치에 XML 파일을 만든다. 여기서는 resources/dao/mybatis/mapper/AssignmentDaoMapper.xml로 만들었다. 이 파일의 이름은 AssignmentDaoMapper.xml라고 지으면 알아보기가 쉽다.

 

이 XML 파일이 어떤 인터페이스를 구현하는지는 어떻게 표현할 수 있을까?

 

mybatis.org/mybatis-3/ko/getting-started.html에서 '매핑된 SQL 구문 살펴보기' 참고

 

<mapper namespace="com.ddoongi.web.dao.AssignmentDao">

    <select id="getList" resultType="com.ddoongi.web.entity.Assignment"> <!-- resultType이 목록인지 단일값인지는 명시할 필요가 없다 -->
        SELECT *
        FROM (SELECT ROWNUM rownumber, B.* FROM
        (SELECT * FROM assignment WHERE ${field} LIKE '%${query}%' ORDER BY reg_date DESC) B) A
        WHERE A.rownumber BETWEEN #{offset} + 1 AND #{offset} + #{size}
    </select>
    
    <insert id="insert" parameterType="com.ddoongi.web.entity.Assignment">
        <!-- query for insert -->
    </insert>
    
</mapper>

 

위와 같이 당장 사용할 것만 구현해도 에러가 발생하지 않는다.

 

한편 XML 파일의 위치는 application.properties에 다음과 같이 명시할 수 있다.

 

mybatis.mapper-locations=classpath:/dao/mybatis/mapper/*.xml

 

참고로 XML에서 <, > 등은 내용에 쓰일 수 없으므로

>은 &gt;

<는 &lt;

로 escape해준다.

Comments