[Mybatis]_MyBatis의 동적 태그 정리
2022. 10. 19. 17:56ㆍ[DB]/Mybatis
728x90
반응형
개요
Mybatis 나 IBatis 를 사용하여 쿼리문을 작성할 때 특정 조건, 혹은 파라미터의 존재 유무에 따라 ex)_ 페이징 처리
비슷한 쿼리를 여러개 작성해야 합니다.
이렇게 비슷한 쿼리를 여러개 생성하는 것 보다. MyBatis 에서 제공하는 동적쿼리를 사용하면 한 쿼리 안에 여러가지의 경우의 수를 가진 쿼리를 작성 할 수 있습니다.
- MyBatis의 동적 태그에는 if, choose, where, trim, foreach가 있습니다.
1. IF 문 : 단일 조건문
기본 문법 ]
<if test="parameter 비교문">
//실행할 쿼리
</if>
예시]
<if test='userName != null and userName != "" '>
AND user_Name = #{userName}
</if>
- 전달 파라미터 : userName
- 비교문 : userName 이 null이 아니거나 "" (공백) 이 아닐경우 쿼리 실행
- 쿼리 내용 : 이전에 쿼리와 붙이기 위해 AND 이후 userName을 파라미터의 userName과 비교
만약 null 혹은 공백이라면 해당 쿼리 실행하지 않고 진행
2. Choose (when,otherwise) : 다중 조건문
기본문법]
<choose>
<when test="parameter 비교문">
//실행할 쿼리
</when>
<otherwise>
//실행할 쿼리
</otherwise>
</choose>
예시
<choose>
<when test="param1 != null and !param1.equals('')">
AND user_type = #{param1}
</when>
<otherwise>
AND user_type = 'all'
</otherwise>
</choose>
- choose 문 사이에 when과 otherwise 를 작성합니다 (otherwise 는 생략 가능)
- when 문은 여러개 작성 가능하며, 조건문이 true 일경우 내무의 쿼리를 실행합니다.
- 만약 when 문에 작성된 값중 true 가 없다면 otherwise 문 내부의 쿼리가 실행됩니다.
3.where & set
조건 : Mybatis version 3.2.3 이상
<select id="testSelect">
SELECT * FROM table
<where>
// 쿼리
</where>
</select>
단독으로 사용하지 않고 보통 다른 태그들을 내포하여 사용하는 경우가 많습니다.
예시
<select id="testSelect">
SELECT * FROM TEST_TABLE
<where>
<if test='user_id != null and user_id != "" '>
user_id = #{user_id}
</if>
<if test='user_pw != null and user_pw != "" '>
user_pw = #{user_pw}
</if>
</where>
</select>
- where 사이에 if 문 둘다 조건을 충족하지 못할 경우
- select * from TEST_TABLE 만 실행되고
- 만일 조건을 충족한다면 where절을 자동으로 추가해 줍니다.
- 만약 2가지 조건이 충족되어 sql문이 실행된다면 자동으로 사이에 AND를 넣어주는 역할을 합니다.
set 은 update 문에서 where 와 동일한 역할을 합니다.
4.trim
<trim prefix="" prefixOverrides="">
<if>
//sql
</if>
</trim>
- where 와 비슷하게 다른 서브쿼리를 도와주는 역활을 하며
- prefix 의 경우 sql 구문 앞에 추가적인 구문을 넣어줍니다.
- suffix의 경우 sql 구문 뒤에 추가적인 구문을 넣어줍니다.
- prefixOverrides 의 경우 sql 구문 앞에 해당 문자가 있으면 자동으로 지워줍니다.
- suffixOverrides 의 경우 sql 구문 뒤에 해당 문자가 있으면 자동으로 지워줍니다.
예시
<trim prefix="WHERE" prefixOverrides="AND|OR">
<if test="searchType=='content' and keyword != null and keyword != '' ">
AND CONTENT like CONCAT('%', #{keyword}, '%')
</if>
<if test="searchType=='register' and keyword != null and keyword != '' ">
AND REGISTER like CONCAT('%', #{keyword}, '%')
</if>
</trim>
- trim 내부의 조건절이 true 인경우 자동으로 where 절을 붙여줍니다.
- 만약 앞에 AND 혹은 OR 가 있을경우 자동으로 지워줍니다.
5. foreach
내용이 많아 다음 포스트 참고
https://yn971106.tistory.com/151
6. sql & include
공통적으로 사용하는 쿼리일 경우 따로 작성하여 재사용 할 수 있습니다.
<sql id="findUser">
<choose>
<when test='user_id != null and user_id != "" '>
and user_id = #{user_nm}
</when>
</choose>
</sql>
id 를 부여하고 공통적으로 사용할 쿼리를 sql 태그 안에 작성합니다.
<include refid="findUser" />
위와같은 include 태그를 통해 해당 아이디를 불러옴으로써 해당 위치에 sql문을 대체할 수 있습니다.
대표적으로 많이 사용하는 MyBatis 동적쿼리를 알아보았습니다.
다음에는 IBatis 에서 자주 사용하는 동적쿼리를 알아보겠습니다.
감사합니다.
728x90
반응형
'[DB] > Mybatis' 카테고리의 다른 글
[MyBatis]_동적 쿼리_foreach문_feat(List<Map>데이터) (0) | 2022.10.19 |
---|