마이바티스에서 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}%'
'[웹개발] > Spring 개념' 카테고리의 다른 글
[스프링 개념] web과 WEB-INF 폴더에 관해서 및 WEB-INF에서의 앵커 태그<a>에 관해서 (0) | 2020.01.13 |
---|---|
[스프링개념] tiles를 사용해보자. (0) | 2020.01.04 |
[스프링 개념] JdbcTemplate으로 list와 SQL method 값을 함께 전달하기. (0) | 2019.12.09 |
[스프링 개념] 스프링 Project import/export 방법(2) (0) | 2019.12.05 |
[스프링 개념] 스프링 Project import/export 방법(1) (0) | 2019.12.05 |