요소 속성 --- dynamic 태크는 다른 동적 sql요소를 포장하고 결과적인 내용물을 위해 prepend, open, close를 수행하기 위해 제공되는 간단한 태그입니다. prepend ``` 속성값을 요소 내용의 가장 앞에 붙이기 위해 사용한다. prepend의 값은 요소 내용이 공백일 때는 앞에 붙이지 않는 다. ``` open ``` open 값은 요소 내용에 접두사로 붙이기 위해 사용한다. open 값은 요소 내용이 공백일 때는 출력되지 않는다. open 값은 prepend 속성 값보다는 뒤에 붙는다. 예를 들면 prepend="WHEN" 이고 open="(" 라면 조합된 결과는 "WHEN (" 가 될 것이다. ``` close ``` close 값은 요소 내용의 뒤에 덧붙이기 위해 사용한다. 이 값은 요소 내용이 공백이라면 출력되지 않는다. ``` ``` select * from account acc_first_name = #firstName# acc_last_name = #lastName# </dynamic> order by acc_last_name </statement> ``` 위와같은 dynamic 쿼리를 사용할 경우, firstName 와 lastName. 이 두가지 값이 있다면, 당연하게도 where 다음에는 and가 바로 붙을 경우, ``` select * from account where and acc_first_name = #firstName# or acc_last_name = #lastName# ``` 이런 이상한 구문이 완성될 것이라고 생각했습니다. 분명 prepend 로 인해 구문 오류가 발생할 것이라고 생각한 것입니다. 하지만, 이 태그를 사용할 때 removeFirstPrepend속성이 강제로 적용된다고 합니다. 즉 맨 처음 나오는 prepend속성놈은 강제로 생략된다는 이야기로, dynamic 태그안에 removeFirstPrepend = true가 적용은 되지만 생략된 채로 있다고 보면 됩니다. ----- # 참조 ----- * [iBATIS 동적 WHERE 절 다루기 위한 요소 설명](http://syaku.tistory.com/51) * [iBatis 동적 쿼리문 생성](http://narrowway.tistory.com/79) * [dynamic 태그, isParameterPresent, removeFirstPrepend 설명](http://javafactory.tistory.com/354) * [Dynamic SQL](http://ibatis.apache.org/docs/dotnet/datamapper/ch03s09.html)