동적 쿼리란? (PreparedStatement)
개념 : 파라미터 값에 의해 쿼리를 동적으로 변환해주는 기능
장점 1 : 정적쿼리(Statement)의 비효율적인 면을 보완할 수 있습니다.
장점 2 : where 절에 들어가는 조건절을 손쉽게 제어할 수 있습니다.
장점 3 : 변수에 따라 쿼리를 바꿀 수 있어 하나의 쿼리로 여러 개의 기능을 연결할 수 있습니다.
단점 1 : 조건을 변경해 주어야 해서 유지보수가 어렵습니다.
단점 2 : 쿼리에 로직이 삽입되므로 가독성이 저하됩니다.
단점 3 : 쿼리가 로직에 대해 의존성을 띄게 됩니다.
IBATIS 동적 쿼리 태그
prepend : sql문에 선행하여 붙는 속성
property : 매개 변수 명
compareProperty : 비교할 다른 매개 변수 명
compareValue : 비교 대상이 되는 값
<isEqual> : property 의 값이 같을 때 태그 내의 쿼리를 실행합니다.
<isNotEqual> : property 의 값이 다를 때 태그 내의 쿼리를 실행합니다.
<isGraterThan> : property 의 값이 비교값 보다 큰 경우 쿼리를 실행합니다.
<isGraterEqual> : property 의 값이 비교값 보다 크거나 같은 경우 쿼리를 실행합니다.
<isLessEqual> : property 의 값이 비교값 보다 작거나 같은 경우 쿼리를 실행합니다.
<isPropertyAvailable> : property 의 값이 유효할 경우 쿼리를 실행합니다.
<isNotPropertyAvailable> : property 의 값이 유효하지 않을 경우 쿼리를 실행합니다.
<isNull> : property 의 값이 null일 경우 쿼리를 실행합니다.
<isNotNull> : property 의 값이 null이 아닐 경우 쿼리를 실행합니다.
<isEmpty> : property 의 값이 비어있는 경우 쿼리를 실행합니다.
<isNotEmpty> : property 의 값이 비어있지 않은 경우 쿼리를 실행합니다.
<isParameterPresent> : parameter가 있을 경우 쿼리를 실행합니다.
<isNotParameterPresent> : parameter가 없을 경우 쿼리를 실행합니다.
<iterate> : parameter로 배열을 받아 쿼리를 실행한다.
<dynamic> : 하위 태그에 일치되는 내용이 존재할 경우 쿼리를 실행한다.
MYBATIS 동적 쿼리 태그
if : isEqual, isNotEqual, isNull, isNotNull, isEmpty, isNotEmpty 를 하나로 표현하도록 변경되었습니다.
<choose><when><otherwise> : 케이스에 따라 조건이 달라질 때 사용합니다.
<where><trim> : 조건에 따라 where절을 추가할 때 사용합니다.
prefixOverrides : 하위 엘리먼트 처리 후 내용의 맨 앞에 해당 문자열이 있다면 제거합니다.
suffixOverrides : 하위 엘리먼트 처리 후 내용의 맨 뒤에 해당 문자열이 있다면 제거합니다.
prefix : 하위 엘리먼트 처리 후 내용이 있다면 가장 앞에 붙여질 내용입니다.
suffix : 하위 엘리먼트 처리 후 내용이 있다면 가장 뒤에 붙여질 내용입니다.
set : 동적으로 update 구문 만들 때 사용합니다.
foreach : 배열 타입의 파라미터를 받을 때 사용합니다.
- collection : 값 목록을 가진 객체로 배열 또는 list
- item : Collection 내의 개별 값을 나타내는 변수 이름
- open: 해당 블럭을 시작할 때 사용할 기호로 주로 '('
- close: 해당 블럭을 시작할 때 사용할 기호로 주로 ')'
- seperator: 각 item을 구분할 분리자 기호로 주로 ','
<bind> : 쿼리에서 사용할 변수를 생성합니다.
참고 블로그
- IBATIS/MYBATIS 동적 쿼리 태그