<!-- 게시판 목록 구현 -->
<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="" 로 편하게 사용할 수 있게 해준다.
'DB > MYBATIS' 카테고리의 다른 글
Mybatis에서 null값 허용하기 (0) | 2021.10.14 |
---|---|
select key의 사용 ex)게시판 첨부파일 작성 (1) | 2021.08.05 |
[MYBATIS]selectList와 selectOne (0) | 2021.07.27 |