service dao 거쳐서 쿼리 동작시켜 호출하는데
하나의 쿼리를 작성해서 여러 상황에 대처할 수 있게끔 하는 것이 동적 쿼리
마이바티스의 큰 장점
동적 쿼리
<select id="selectSearchResultCount" resultType="_int">
SELECT COUNT(*)
FROM BOARD B
JOIN MEMBER M ON (B.BWRITER = M.MID)
WHERE B.STATUS = 'Y'
<if test="writer != null">
AND USER_NAME = #{writer}
</if>
<if test="title != null">
AND BTITLE LIKE '%' || #{title} || '%'
</if>
<if test="content != null">
AND BCONTENT LIKE '%' || #{content} || '%'
</if>
</select>
주석
<!-- 만약 쿼리문 안에 < 기호가 포함된다면 연산자로 인식하지 않고 태그로 인식한다. -->
<!-- 이걸 해결하기 위해 쿼리문을 cdata주석으로 감싸야 한다. -->
<![CDATA[
>
]]>
SELECT * FROM EMPLOYEE
<![CDATA[
WHERE EMP_ID < 200
]]>
IF
중복되는 쿼리 id 만들어놓고 인클루드
http://mybatis.org/dtd/mybatis-3-mapper.dtd>">
SELECT COUNT(*)
FROM BOARD
WHERE STATUS = 'Y'
SELECT *
FROM BOARD B
JOIN MEMBER M ON(B.BWRITER = M.MID)
WHERE B.STATUS = 'Y'
ORDER BY BID DESC
UPDATE BOARD
SET BCOUNT = (SELECT BCOUNT FROM BOARD WHERE BID = #{bid}) + 1
WHERE BID = #{bid}
B.BID
, B.BTYPE
, B.BTITLE
, B.BCONTENT
, B.BWRITER
, B.BCOUNT
, B.CREATE_DATE
, B.MODIFY_DATE
, B.STATUS
, M.USER_NAME
, R.RID
, R.RCONTENT
, R.REF_BID
, R.RWRITER
, R.USER_NAME REPLY_WRITER
, R.CREATE_DATE REPLY_CREATE_DATE
, R.MODIFY_DATE REPLY_MODIFY_DATE
SELECT /*+ com.kh.mb.board.model.dao.BoardDao.selectOneBoard() */
FROM BOARD B
JOIN MEMBER M ON (B.BWRITER = M.MID)
LEFT JOIN (SELECT R2.RID
, R2.RCONTENT
, R2.REF_BID
, R2.RWRITER
, R2.CREATE_DATE
, R2.MODIFY_DATE
, R2.STATUS
, M2.USER_NAME
FROM MEMBER M2
JOIN REPLY R2 ON (R2.RWRITER = M2.MID)
WHERE R2.STATUS = 'Y') R
ON (R.REF_BID = B.BID)
WHERE B.BID = #{bid}
AND B.STATUS = 'Y'
ORDER BY RID DESC
SELECT COUNT(*)
FROM BOARD B
JOIN MEMBER M ON (B.BWRITER = M.MID)
WHERE B.STATUS = 'Y'
AND USER_NAME = #{writer}
AND BTITLE LIKE '%' || #{title} || '%'
AND BCONTENT LIKE '%' || #{content} || '%'
#이랑 $ 사용 차이
반응형
댓글