Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 깃허브
- 친구랑
- 자바
- 재밌당
- Android
- kotlin
- android studio
- Java
- oracle
- GitHub
- error
- 공부
- AndroidStudio
- 코틀린
- 오라클
- Git
- 안드로이드
- 리눅스
- 자바스크립트
- Eclipse
- 별5개
- 개발자
- 1박2일
- 도쿄
- 3박4일
- db
- JavaScript
- 오류해결
- 개발
- 안드로이드스튜디오
Archives
- Today
- Total
dev_eunz
[MyBatis] 쿼리작성 (동적쿼리, #{} ${} 차이점, CDATA 사용) 본문
728x90
반응형
현재 재직중인 회사에서
MyBatis라는 프레임워크를 처음 접해보았다.
생각보다 많은 곳에서 사용되고 있던 MyBatis.
내가 까먹지 않기 위해서 일단 작성해본다.
1단계.
아래와 같이 구성되어있는 쿼리가 있다고
SELECT *
FROM EXAM_TABLE
WHERE EXAM_1 = 1
AND EXAM_2 >= 10
MyBatis 에서는 이대로 바로 사용했다가는, 원하는 결과를 보지 못한다.
아래와 같이 수정해서 사용하자.
SELECT *
FROM EXAM_TABLE
WHERE EXAM_1 = 1
AND EXAM_2 <![CDATA[ >= ]]> 10
CDATA 구문을 사용하면, JSP/XML 파일에서 사용시 태그(Tag)로 인식되는 것이 아니라 대괄호([]) 안의 내용을 코드로 인식하게 된다.
2단계.
쿼리에 원하는 데이터를 넣어 비교하고 싶을 때.
SELECT *
FROM EXAM_TABLE
WHERE EXAM_1 = #{EXAM_1}
AND EXAM_2 <![CDATA[ >= ]]> ${EXAM_2}
#{} 과 ${} 의 차이점
#{}
- 보안 측면에서 유리하다.
- 파라미터가 String 형태로 들어온다.
- EXAM_1 = 1 인 경우, #{EXAM_1} => '1'
- ( SELECT * FROM EXAM WHERE EXAM_1 = #{EXAM_1} )
${}
- 파라미터가 바로 출력된다.
- 사용자의 입력인 경우, '' (String화) 필요하지만 적용되지 않는다.
- 테이블이나 컬럼명 전달시에 효과적.
- ( SELECT ${EXAM_1} FROM EXAM )
※ 참고로, 비교대상 데이터의 조건 거는 법
데이터가 값이 없으면,
EXAM_1 =
==> 오류 발생 !
SELECT *
FROM EXAM_TABLE
WHERE 1=1
<if test = "'EXAM_1 != null and EXAM_1 != ''" > AND EXAM_1 = #{EXAM_1} </if>
'and'를 소문자로 사용해야함을 잊지 말자.
위와 같은 코드를 실행하면,
EXAM_1 데이터가 있을 때에만 해당 구문을 타기 때문에 파란 부분처럼 처리하는 것이 좋다.
728x90
반응형
'IT > 프로그래밍' 카테고리의 다른 글
[ORACLE] 한글 3BYTE인데, 2BYTE 기준으로 길이맞추기. LENGTHB 사용 (0) | 2020.11.08 |
---|---|
[알고리즘] (0) | 2020.10.12 |
[코틀린 스터디] 시작 (0) | 2020.09.06 |
[ORACLE] 시퀀스 마지막 번호 알아내기 ( .CURRVAL 사용X ) (0) | 2020.09.06 |
[외주] 첫 거래 성공 (0) | 2017.11.01 |
Comments