<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에 searchValue와 searchKey 속성을 추가하고 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 에서 짜집기 하는것이었음
그게 더 짧은 소스를 생성해 원하는것을 얻을수 있고
더 가독성이 뛰어나고,
더 유지보수가 용이함
'개발 > JAVA' 카테고리의 다른 글
Java xml 프레임워크 설정시 DTD 내장방법 (1) | 2012.07.03 |
---|---|
Tomcat7 tomcat-jdbc 설정 - Broken pipe 에러 회피 (0) | 2012.04.25 |
AES 암호화 / 복호화 (0) | 2011.09.28 |
JSmooth와 이클립스 Visual Editor를 이용한 Swing 어플개발 (0) | 2011.02.18 |