ABOUT ME

초급 백앤드 개발자의 코딩 기록

Today
Yesterday
Total
  • [MyBatis] 동적 쿼리 trim 문법 알아보기
    Back-End/Spring Legacy 2023. 4. 17. 08:41

     

     

    <trim>은 하위에서 만들어지는 sql 문을 조사하여 앞 쪽에 추가적인 sql을 넣을 수 있다. 

    prefix, suffix, prefixOverrides, suffixOverrides 속성을 지정할 수 있다. 

     

     

    📑 prefix 

     

    실행될 쿼리의 <trim>문 안 쿼리 가장 앞에 붙여준다. 

     

    UPDATE board
    <trim prefix="SET">
    username=#{username},password=#{password}
    </trim>

     

    📑 prefixOverrides 

     

    실행될 쿼리의 <trim>문 안 쿼리 가장 앞에 해당하는 문자들이 있으면 자동으로 지워준다. 

     

    SELECT * FROM board WHERE id = #{id}
    <trim prefixOverrides="OR">
    OR TT LIKE '%' || #{searchContent} || '%'
    </if>

     

     

    📑 suffix

     

    실행될 쿼리의 <trim>문 안 쿼리 가장 뒤에 붙여준다. 

     

    <trim suffix=")"></trim>

     

     

    📑  suffixOverrides 

     

    실행될 쿼리의 <trim>문 안에 쿼리 가장 뒤에 해당하는 문자들이 있으면 자동으로 지워준다. 

     

    <trim suffixOverrides=","></trim>

     

     

     

     


     

    📑 문법 예제

     

    <select id="test" resultType="user">
    SELECT * FROM user WHERE id = #{id}  
    <trim prefix="AND (" prefixOverrides="OR" suffix=")">
            <if test="para1 != null">
            OR para1 = #{data1}
            </if>
            <if test="para2 != null">
            OR para2 = #{data2}
            </if>
    </trim>
    </select>

     

     

    📌 1. prefix를 사용했으므로 trim문 가장 앞에 " AND ( " 를 붙여준다. 

    📌 2. prefixOverrides를 사용했으므로 trim문 가장 앞에 "OR"이 있으면 이를 지워준다. 

    📌 3. suffix를 사용했으므로 trim문 가장 마지막에 ")"를 붙여준다. 

     

     

    만약 para1과 para2에 값이 들어올경우 아래와 같은 쿼리가 실행된다. 

    SELECT * FROM user
    WHERE id ='119' AND para1 = 'java119' OR para2 = 'java119'

     

    반응형

    댓글

Designed by Tistory.