ibatis 검색용 공용 메소드 만들기

프로그래밍/iBatis 2009. 12. 16. 14:30

ibatis 를 사용하던중 모든 테이블에 대해서 공용으로 사용할 수 있는 select 구문을 만들 수 있을까? 하고 생각해 보았다.
해답은 매뉴얼 상에 있었으며 매뉴얼 상에 나와있는 dynamic 예문을 활용하여 만들어 보았다.
<select id="cm-get-field" resultClass="java.lang.Object" parameterClass="examples.beans.SearchParameter">
	SELECT $fieldName$ as value
	FROM $tableName$
	<dynamic prepend="WHERE">
			<iterate property="conditions" conjunction="and" open="(" close=")">
				$conditions[].name$
				#conditions[].value#
			</iterate>
	</dynamic>
</select>

우선 공통적으로 사용할 검색용 객체, SearchParameter 객체를 만들었다. SearchParameter 는 검색 결과를 원하는 fieldName , tableName 그리고 검색조건을 나타내는 SearchCondition 배열을 갖게 된다.
위 iterate 구문에서 나오는 conditions property 를 통해서 SearchCondition 배열이 사용된다.( [] postfix 를 사용하기 위해서는 conditions property 로 리턴하는 객체는 Collection의 하위 객체이어야 한다. 예) ArrayList, Array...)
iterate 구문은 자동으로 해당 conditions property 에서 리턴된 객체를 반복적으로 수행해준다.
만약 두개의 SearchCondition 이 ["com_id =", "1"],["com_name =", "samsong"] 으로 설정되어 있다면 자동으로 com_id = '1' and com_name = "samsong" 으로 변환해 준다. 따라서 SearchCondition 의 내용에 따라서 동적으로 where 절을 설정할 수 있다.
뭐 아직까지는 불완전하지만 이정도면 그나마 편하게 사용할 수 있지 않을까 생각해본다...
: