MyBatis Dynamic Query
쿼리에 연산을 넣어서 쿼리를 확장하는 방법
1) insert 문에서만 동작
<selectKey> : 전달받은(parameter Type)의 <seleckKey>를 통해서 객체에 값을 입력하여 사용
order ="before/after" 메인 쿼리가 실행되기 전 후에 실행을 제어함
입력시 필요한 ID, SEQ를 외부에 전달할 때 사용
2) Binding
#, $ 두종류가 있음
# = 값을 ' 값 '
$ = 값을 값
#=값을, $ = 컬럼이나 Alias를 쓸때 사용함
하지만 얘네는 SQL Injection의 공격대상이 돼서 가능하면 쓰지 말아야함
SQL Injection공격이란? (OWASP) 참고
-> $바인딩을 해야 column을 제대로 인식함
#binding을 해서 파라미터가 '1' or '1' = '1' 이 돼야하지만 그러지 않았음
$binding을 한 후에 "'1' or '1' = '1'"로 바꾸면 정상 작동함
Like문 작성시 mapper XML을 확인해야함
-> Val을 키값으로 하는 "AD"를 Like문에 넣는거임 그래서 LIKE 는 '%$바인딩%'
만약 # 으로 바꾸면 인식하지 못함
#바인딩을 하고 싶으면 '%' || #{val} 해야함
IF문으로 여러개 쿼리 하나로 줄이기
job_id가 null이 아니면 where JOB_ID = job_id를 실행해
Iterator를 통해서 쿼리문의 In 절 생성
-> (값, 값, 값,...) 마지막 값은 , 안찍고 )로 닫기
choose문을 사용한 선택 쿼리
Trim
prefix = 앞에 붙여줌
prefixOverrides = 조건문이 성립하면 삭제할 문자 (여기선 AND)
Set
-> set 은 자동으로 오버라이드해서 , 를 삭제해줌
set의 tag를 trim으로 변경하여 처리
-> prefix로 SET을 으로 시작/ suffixOverrides로 마지막 쉼표 제거
마지막 Trim~Set 하면 카멜표기법에대해 말해주셨었는데.. .잘기억이안남.. 그래서 #{jobTitle} 일케 한건디.... 왜..였지...
소감 : ㅇ ㅣ번주 한 주도 화이팅....
구디아카데미 후기/ 국비지원IT개발자 취업 / 전민균 강사님