본문 바로가기
BackEnd/MyBatis

[MyBatis] 반복되는 쿼리 묶기_<sql/><include/>

by 성은2 2020. 8. 31.

문법

<sql id/>

<include refid/>

 ...
<mapper>
....
    <sql id="exampleSelect">
        SELECT * FROM TABLE1
    </sql>

    <select id="getList" resultType="hashmap">
        <include refid="exampleSelect" />
        WHERE name = #{value}
    </select>

</mapper>


출처: https://marobiana.tistory.com/22 [Take Action]

 

내 Mapper에 사용한 경우 : 공통으로 반복되는 WHERE 구문에 사용

<mapper namespace="board">
	<!-- 공통 쿼리문 -->
	<sql id="fn_keyword">
		<if test="word != '' ">
            <choose>
            <when test ="key == 'ALL' ">
                WHERE 
                    TITLE like '%' ||  #{word} || '%'
                    OR MEMBER_ID like '%' ||  #{word} || '%'
                    OR CONTENT like '%' ||  #{word} || '%'
            </when>
            <otherwise>
                WHERE ${key} like '%' ||  #{word} || '%'
            </otherwise>
		</choose>
		</if>
	</sql>
	
	<!--  count  -->
	<select id="count" resultType="int" parameterType="hashmap">
		SELECT
		COUNT(*) TOTAL
		FROM
		BOARD
		<include refid="fn_keyword"/>
	</select>

	<!-- 게시글 목록 -->
	<select id="selectBoardList" parameterType="hashmap" resultType="hashmap">
		SELECT * from
			(
            	SELECT ROW_NUMBER() OVER(ORDER BY BOARD_NO) AS rnum, 
					 , BOARD_NO, TITLE, MEMBER_ID, REGDATE  
				FROM BOARD
				<include refid="fn_keyword"/>
				ORDER BY rnum desc
            )
		WHERE RNUM BETWEEN #{LimitStart} AND #{LimitEnd} 
	</select>
    </mapper>