< MyBatis SQL 처리 >
마이바티스의 가장 강력한 기능 중 하나는 동적 SQL을 처리하는 방법이다. JDBC나 다른 유사한 프레임워크를 사용해본 경험이 있다면 동적으로 SQL 을 구성하는 것이 얼마나 힘든 작업인지 이해할 것이다. 간혹 공백이나 콤마를 붙이는 것을 잊어본 적도 있을 것이다. 동적 SQL 은 그만큼 어려운 것이다.
- if
- choose (when, otherwise)
- trim (where, set)
- foreach
동적 SQL 엘리먼트들은 JSTL이나 XML기반의 텍스트 프로세서를 사용해 본 사람에게는 친숙할 것이다. 마이바티스의 이전 버전에서는 알고 이해해야 할 엘리먼트가 많았다. 마이바티스 3 에서는 이를 크게 개선했고 실제 사용해야 할 엘리먼트가 반 이하로 줄었다. 마이바티스의 다른 엘리먼트의 사용을 최대한 제거하기 위해 OGNL 기반의 표현식을 가져왔다.
=> XML 기반 JSTL과 같은 형식의 표현식 사용 가능!!
* if
<select id="findActiveBlogWithTitleLike"
resultType="Blog">
SELECT * FROM BLOG
WHERE state = ‘ACTIVE’
<if test="title != null">
AND title like #{title}
</if>
</select>
<select id="selectSearchCount" parameterType="hashmap" resultType="_int">
SELECT
COUNT(*)
FROM
BOARD
JOIN
MEMBER ON (BOARD_WRITER = USER_NO)
WHERE
BOARD.STATUS = 'Y'
<if test="condition == 'writer'" > <!-- parametertype에 map을 적어놨기때문에 키값만 쓰면 됨 -->
AND USER_ID
</if>
<if test="condition == 'content'">
AND BOARD_CONTENT
</if>
<if test="condition == 'title'">
AND BOARD_TITLE
</if>
LIKE '%' || #{ keyword } || '%'
</select>
* choose (when, otherwise)
<select id="findActiveBlogLike"
resultType="Blog">
SELECT * FROM BLOG WHERE state = ‘ACTIVE’
<choose>
<when test="title != null">
AND title like #{title}
</when>
<when test="author != null and author.name != null">
AND author_name like #{author.name}
</when>
<otherwise>
AND featured = 1
</otherwise>
</choose>
</select>
<select id="selectSearchList" parameterType="hashmap" resultMap="boardResultSet">
SELECT
BOARD_NO,
BOARD_TITLE,
USER_ID,
COUNT,
CREATE_DATE
FROM
BOARD B
JOIN
MEMBER ON (BOARD_WRITER = USER_NO)
WHERE
B.STATUS = 'Y'
<choose>
<when test="condition == 'writer'">
AND USER_ID
</when>
<when test="condition == 'title'">
AND BOARD_TITLE
</when>
<otherwise>
AND BOARD_CONTENT
</otherwise>
</choose>
LIKE '%' || #{ keyword } || '%'
ORDER
BY
BOARD_NO DESC
</select>
'개발 > Framework' 카테고리의 다른 글
[Spring] Spring Legacy Project 디렉토리 구조 (+ 추가 중) (0) | 2022.12.26 |
---|---|
[Spring] 메이븐(Maven) 개념 / 사용법 (1) | 2022.12.25 |
[Mybatis] Mybatis 페이징처리 / RowBounds 사용 (0) | 2022.12.19 |
[MyBatis] INSERT문 / SELECT문 + resultMap xml파일 작성법 (5) | 2022.12.18 |
[MyBatis] 기본 XML 설정 / SqlSession 생성 (4) | 2022.12.15 |