[마이바티스] SQL 동적 처리
마이바티스에서 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 Framework > Spring 개념' 카테고리의 다른 글
[스프링 개념] 오라클 ojdbc.jar를 pom.xml에 추가하는 방법(오라클 공식) (0) | 2021.04.08 |
---|---|
[스프링 개념] pom.xml에서 오라클 라이센스 얻어오는 방법 (0) | 2021.04.08 |
[스프링 개념] web과 WEB-INF 폴더에 관해서 및 WEB-INF에서의 앵커 태그<a>에 관해서 (1) | 2021.04.08 |
[스프링개념] tiles를 사용해보자. (0) | 2021.04.08 |
[스프링 개념] JdbcTemplate으로 list와 SQL method 값을 함께 전달하기. (0) | 2021.04.08 |
[스프링 개념] 스프링 Project import/export 방법(1) (0) | 2021.04.08 |
[스프링 개념] @ModelAttribute의 값이 list로 넘어가질 않을 때 (0) | 2021.04.08 |
[Spring 개념] database.properties에 Oracle Driver 추가 (0) | 2021.04.08 |