[웹개발]/Spring 개념
[마이바티스] SQL 동적 처리
SEOULSENSE
2019. 12. 29. 20:57
마이바티스에서 SQL 동적 처리시 주의해야 할 사항이 몇가지 있다.
1. wehre문 진행시 <where>로 감싸줘야 한다.
2. if문 진행시 아래와 같이 <if text = "칼럼명 == '비교값'"을 해야 한다. 여기서 주의할 점은 비교값에 '' 따옴표 처리가 되어 있어야 한다.
3. if문에서 #{ch1} = #{ch2}와 같이 변수로 칼럼명을 넣을 수 없다. 그렇기 때 문에 아래와 같이 직접 칼럼명을 입력해 줘야 한다.
4. <where>처리하면 FROM BOARD 다음에 바로 AND를 사용할 수 있다. SQL 문에서는 불가한 문법이다.
5. LIKE문 진행시 DBMS에 따라 처리 방법이 다르다
<select id="getListBoard" resultMap="boardResult">
SELECT SQL_CALC_FOUND_ROWS
NUM, SUBJECT, WRITER, REG_DATE, READCOUNT
FROM BOARD
<where>
<if test="ch1 != null and ch1 == 'writer'">
AND writer=#{ch2}
</if>
<if test="ch1 != null and ch1 == 'subject'">
AND subject LIKE CONCAT('%',#{ch2},'%')
</if>
</where>
ORDER BY NUM DESC
LIMIT #{minLimit}, #{maxLimit}
</select>
우선 1,2,3,4번은 상기 설명한 내용과 같기 때문에 어려운 부분이 없을 것이다.
그럼 5번의 경우를 한번 보도록하자
<SQL 문>
SELECT * FROM BOARD WHERE WRITER LIKE '%ch2%'
<MyBatis Using Oracle>
SELECT * FROM BOARD
WHERE WRITER LIKE '%'||#ch2#||'%'
<MyBatis Using MySql>
SELECT * FROM BOARD
WHERE WRITER LIKE CONCAT(‘%’, #{ch2}, ‘%’)
<전체>
아래와 같이 # 대신 $를 넣을 경우 DBMS 상관없이 정상 검색되는 것으로 확인되었으니 참고하도록하자
subject LIKE '%${ch2}%'