본문 바로가기
Programming/MyBatis

[mybatis] 마이바티스

by AI_Wooah 2022. 3. 7.

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} || '%'
          
       
         
   
   

#이랑 $ 사용 차이

반응형

댓글