[MyBatis] 동적쿼리(동적 태그)
MyBatis를 이용해서 같은 형태의 분류만 다른 쿼리를 사용해야 할 때 id만 다르게 쿼리를 여러개 작성해야 할 때가 있다.
이러할 때에는 동적 태그를 이용해서 하나의 쿼리문으로 여러 경우의 다른 쿼리를 전송할 수 있다.
MyBatis의 동적 태그에는 if, choose(when, otherwise), where, trim, foreach가 있다.
[ if ]
<if>는 <if test="[true 또는 false의 비교연산]"></if>의 형태로 작성한다.
검색 조건의 type항목이 Title일 때 예시
<if test="type == 'Title'">
TITLE LIKE '%'||#{keyword}||'%'
<if>
[ choose ]
<choose>는 <when>과 <otherwise>와 함께 사용하며 <choose>태그 안에서 <when test="[true 또는 false의 비교연산]"> 그리고 <otherwise>의 형태로 작성한다.
검색 조건의 type항목이 Title일 때, Content일때, Writer일때와 그 외의 경우 예시
<choose>
<when test="type='Title'">
TITLE LIKE '%'||#{keyword}||'%'
</when>
<when test="type='Content'">
CONTENT LIKE '%'||#{keyword}||'%'
</when>
<when test="type='Writer'">
WRITER LIKE '%'||#{keyword}||'%'
</when>
<otherwise>
TITLE LIKE '%'||#{keyword}||'%' OR CONTENT LIKE '%'||#{keyword}||'%' OR WRITER LIKE '%'||#{keyword}||'%'
</otherwise>
</choose>
[ where ]
<where>은 <where>태그 속에서 <if>태그 등과 같이 조건을 두고, 조건절이 필요할 때에 WHERE을 붙여주는 태그다.
bno가 null이 아닐 경우 WHERE절을 붙이는 예시
SELECT * FROM TBL_TABLE
<WHERE>
<if test="bno != null">
bno = #{bno}
</if>
</WHERE>
[ trim ]
<trim>은 동적 태그를 이용하며 상황에 맞추어 코드를 추가하거나 삭제하는 태그이다.
상황에 따라 해당 태그 속에서 원하는 코드를 지울 수 있다.
<trim prefix="[trim태그 앞에 붙을 코드]" subfix="[trim태그 뒤에 붙을 코드]" prefixOverrides="[trim태그 속에 있는 코드 중 상황에 맞추어 제외하거나 존재하게 할 코드]"> 의 형태로 작성한다.
bno가 null이거나 아닐 때 AND를 붙일지 붙이지 않을 지 자동 선택하게 하는 예시
SELECT * FROM TBL_BOARD
<where>
<if test="bno != null">]
BNO = #{bno}
</if>
<trim prefixOverrides="AND">
AND ROWNUm = 1
</trim>
</where>
[ foreach ]
<foreach>는 List, 배열, map 등을 이용해서 루프를 처리한다.
<foreach item="value" index="key" collection="[List or 배열 or map]">의 형태로 작성한다.
'Java & Kotlin > Spring Data' 카테고리의 다른 글
[QueryDSL] 프로젝션 (0) | 2022.05.14 |
---|---|
[QueryDSL] QueryDSL 기본문법 (0) | 2022.05.11 |
[QueryDSL] QueryDSL 시작하기 (0) | 2022.05.10 |
[JPA] UniqueConstraint와 Embedded field (0) | 2022.05.07 |
[JPA]영속성 전이 CASCADE (0) | 2022.04.21 |
[JSP] MyBatis (0) | 2021.03.15 |