[MyBatis] Element

LeHoODU·2023년 12월 7일
0
post-thumbnail

MyBatis?

마이바티스는 자바 퍼시스턴스 프레임워크의 하나로 XML 서술자나 애너테이션을 사용하여 저장 프로시저나 SQL 문으로 객체들을 연결한다.


MyBatis의 장점?

마이바티스의 가장 강력한 기능 중 하나는 동적 SQL을 처리하는 것이다.


MyBatis Element

1.if
2.foreach
3.choose(when, otherwise)
4.trim (where, set)


1.if

적 SQL 에서 가장 공통적으로 사용되는 것으로 where의 일부로 포함

//title 값이 비어있다면 해당 조건절은 생략
<select id="findLeHoODU_log"
     resultType="String">
  SELECT * FROM VELOG
  WHERE state = ‘ACTIVE’
  <if test="title != null and title != ''">
    AND title like #{title}
  </if>
</select>

2.foreach

collection 에 대해 반복처리를 하는 것이다. 종종 IN 조건을 사용

//list라는 collection의  item들을 뽑아 (item1,item2,...) IN 조건을 생성
<select id="selectPostIn" resultType="String">
  SELECT *
  FROM POST P
  <where>
    <foreach item="item" index="index" collection="list"
        open="ID in (" separator="," close=")" nullable="true">
          #{item}
    </foreach>
  </where>
</select>

3.choose(when, otherwise)

자바의 switch 구문과 유사

//원하는 조건들을 choose절 안에 생성하여 조건을 설정한다
<select id="findActiveBlogLike"
     resultType="String">
  SELECT * FROM BLOG WHERE state = ‘ACTIVE’
  <choose>
    <when test="title != null and title != ''">
      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>

4.trim (where, set)

<select id="findLeHoODU_log"
     resultType="String">
  SELECT * FROM VELOG
  WHERE 
  <if test="state != null and state != ''">
    AND state = #{state}
  </if>
  <if test="title != null and title != ''">
    AND title like #{title}
  </if>
</select>

위 쿼리에서 if 조건이 하나도 부합하지 않다면

SELECT * FROM VELOG
  WHERE 

다음과 같은 쿼리가 생성 될 것이다. 이것을 위해 trim을 사용한다

📚
.prefix = 앞에 붙일 조건(where, set)
.prefixOverrides = prefix와 겹칠때 제거 할 것(and, or ..)
.suffix = 뒤에 붙일 문자( ')' ..)
.suffixOverrides = 뒤에 제거할 문자( ',' ..)

<select id="findLeHoODU_log"
     resultType="String">
  SELECT * FROM VELOG
  <trim prefix="WHERE" prefixOverrides="AND |OR">
    <if test="state != null and state != ''">
      AND state = #{state}
    </if>
    <if test="title != null and title != ''">
      AND title like #{title}
    </if>
  </trim>
</select>

💡state가 null이라면

<select id="findLeHoODU_log"
     resultType="String">
SELECT * FROM VELOG
    WHERE title like #{title}
</select>
profile
Back-End Developer

0개의 댓글