DB/MYBATIS

MYBATIS에서 include문 사용법

간펴니 2021. 7. 31. 18:52
728x90
<!-- 게시판 목록 구현 -->
	<select id="listPage" resultType="kr.co.vo.BoardVO"
		parameterType="kr.co.vo.Criteria">
		SELECT BNO,
		TITLE,
		CONTENT,
		WRITER,
		REGDATE
		FROM (
		SELECT BNO,
		TITLE,
		CONTENT,
		WRITER,
		REGDATE,
		ROW_NUMBER() OVER(ORDER BY BNO DESC) AS
		RNUM
		FROM MP_BOARD
		WHERE 1=1
		<include refid="search"></include>
		) MP
		WHERE RNUM BETWEEN #{rowStart} AND #{rowEnd}
		<!-- 1페이지 1and 10 ,2페이지 11and 20 -->
		ORDER BY BNO DESC
	</select>

	<select id="listCount" parameterType="kr.co.vo.SearchCriteria"
		resultType="int">
		SELECT COUNT(BNO)
		FROM MP_BOARD
		WHERE 1=1
		<include refid="search"></include>
		AND BNO > 0
	</select>

	<!-- include refid= 이 부분은 반복되는 부분을 sql id=을 통해 이을 수 있게 해줌
	where 1=1은 if문에 해당하는 것이 있으면 이어지고 없으면 없는 것과 같다.
	 -->
	<sql id="search">
		<if test="searchType != null">
			<if test="searchType == 't'.toString()">AND TITLE LIKE '%' || #{keyword} || '%'</if>
			<if test="searchType == 'c'.toString()">AND CONTENT LIKE '%' || #{keyword} || '%'</if>
			<if test="searchType == 'w'.toString()">AND WRITER LIKE '%' || #{keyword} || '%'</if>
			<if test="searchType == 'tc'.toString()">AND (TITLE LIKE '%' || #{keyword} || '%') or (CONTENT
				LIKE '%' || #{keyword} || '%')</if>
		</if>
	</sql>

refid(reference id)는 반복되는 쿼리를 미리 작성해 놓고 재활용 할 수 있게 해준다.

위의 예제에서 확인해야 할 것은 

WHERE 1=1
<include refid="search"></include>

이다.

 

where 1=1은 

refid = "search" search라는 id로 이어지는

 

<sql id="search">
<if test="searchType != null">
<if test="searchType == 't'.toString()">AND TITLE LIKE '%' || #{keyword} || '%'</if>
<if test="searchType == 'c'.toString()">AND CONTENT LIKE '%' || #{keyword} || '%'</if>
<if test="searchType == 'w'.toString()">AND WRITER LIKE '%' || #{keyword} || '%'</if>
<if test="searchType == 'tc'.toString()">AND (TITLE LIKE '%' || #{keyword} || '%') or (CONTENT
LIKE '%' || #{keyword} || '%')</if>
</if>
</sql>

 

sql id = "search "에서

if문에 해당하는 것이 없으면 없는 것과 같고, 있다면 뒤에 그대로 이어진다.

 

한마디로 중복되는 sql을 작성해놓고 다시 작성할 필요 없이 include refid="" 로 편하게 사용할 수 있게 해준다.

728x90