admin write
blogblogblogbloglocation loglocation logtag listtag listguest bookguest book
rss feed

<sqlMap namespace="board">
<typeAlias alias="Board" type="board.BoardVO"/>

<sql id="board.where">
<!-- searchValue값이 비어있지 않다면 -->
<isNotEmpty property="searchValue">
<!-- parameterClass의 searchKey값이 "all" 과 같다면 -->
<isEqual property="searchKey" compareValue="all">
WHERE title LIKE #searchValue#
OR content LIKE #searchValue#
</isEqual>
<isEqual property="searchKey" compareValue="title">
WHERE title LIKE #searchValue#
</isEqual>
<isEqual property="searchKey" compareValue="content">
WHERE content LIKE #searchValue#
</isEqual>
</isNotEmpty>
</sql>

<select id="board.getList" parameterClass="Board" resultClass="Board">
SELECT *
FROM board
<include refid="board.where" /> <!-- board.where 를 여기에 삽입한다 -->
</select>

</sqlMap>


위에 보면 #searchValue# (검색내용) 와 #searchKey# (검색항목) 가 있죠?

로직부분에서 두 값을 담아 올 수 있게
BoardVO에 searchValuesearchKey 속성을 추가하고 Get/Set메소드를 만들어 줍니다
만약 정렬(orderValue)이나 페이징(firstRow, lastRow ) 이 필요할때도 VO에 추가해주면 됩니다

DAO 메소드

public List getList(BoardVO vo) throws SQLException {
return sqlMapper.queryForList("board.getList", vo);
}



JSP페이지에 검색부분은 이런식일테고
<select name="searchKey" >
<option value="all">제목+내용</option>
<option value="title">제목</option>
<option value="content">내용</option>
</select>
<input type="text" name="searchValue" />
<input type="submit" value="검색" />

자바 소스에 추가되는 내용은 이정도겠죠?
vo.setSearchKey(request.getParameter("searchKey") );
vo.setSearchValue(request.getParameter("searchValue") );
List list = dao.getList(vo);

[출처] http://slog2.egloos.com/3572364



PS. iBatis와 Spring 으로 구성을 하여 프로젝트를 하면서

DB의 테이블 디자인이 UI를 고려하지 않은 너무 데이터 수집위주로 디자인된경우

이런 동적쿼리를 많이 쓰게 되었는데

개발당시에야 익숙해지면 어느정도 개발이 되지만

추후 문제가 생겨 수정하려하니 하나 고치면 다른 한곳에서  오류나고 ;;  그러다보니

include 를 빼고 수동으로 다 입력..

또 그러다보니 어느순간에 이건 모두가 다 동적쿼리가 아니고.. 아...

동적쿼리를 쓰게 만드는 구조나 패턴은 최대한 배제해야 하고

만일, 정말 동적쿼리가 많이 쓰이게되는경우

최고의 방법은 iBatis에서 include의 사용을 완전히 배재하고

아주 스탠다드하게 isEqual, isNotEqual 로 1차적인 if 들을 걸러 동적쿼리를 어느정도 구현하고

나머지는 java 에서 짜집기 하는것이었음

그게 더 짧은 소스를 생성해 원하는것을 얻을수 있고

더 가독성이 뛰어나고,

더 유지보수가 용이함