티스토리 뷰
이전에 실습했던 글 목록을 불러오는 코드의 경우, 다음과 같이 검색할 내용에 따라 Controller 에서 if 문을 통해 값을 따로 저장받는 코드가 존재했었다.
◎Controller
@RequestMapping(value="/getBoardList.do")
public String getBoardList(BoardVO vo, Model model) {
System.out.println("글 목록 검색 처리");
// null Check
if(vo.getSearchCondition() == null){
vo.setSearchCondition("TITLE");
}
if(vo.getSearchKeyword() == null){
vo.setSearchKeyword("");
}
//Model 정보 저장
model.addAttribute("boardList", boardService.getBoardList(vo));
return "getBoardList.jsp";
}
이후 searchKeyword 변수의 값에 따라 Mapping.xml 에서 select 문을 다음과 같이 따로 분기하여 실행했다.
◎DAO
public List<BoardVO> getBoardList(BoardVO vo) {
if(vo.getSearchCondition().equals("TITLE")){
return mybatis.selectList("BoardDAO.getBoardList_T", vo);
} else if(vo.getSearchCondition().equals("CONTENT")){
return mybatis.selectList("BoardDAO.getBoardList_C", vo);
}
return null;
}
◎mapping.xml
<select id = "getBoardList_T" resultMap = "boardResult">
<![CDATA[
SELECT * FROM BOARD WHERE TITLE LIKE '%' || #{searchKeyword}||'%' ORDER BY SEQ DESC
]]>
</select>
<select id = "getBoardList_C" resultMap = "boardResult">
<![CDATA[
SELECT * FROM BOARD WHERE CONTENT LIKE '%' || #{searchKeyword}||'%' ORDER BY SEQ DESC
]]>
</select>
그런데 이런 식으로 코드를 작성할 경우, 검색 조건이 많아지면 작성해야 할 select 문도 많아지고, 그럼 개발이나 유지보수 측면에서 번거로울 수 밖에 없다.
Mybatis는 이런 번거로움을 줄일 수 있는 DynamicSQL 기능을 다음과 같이 사용할 수 있도록 지원한다.
▷Dynamic SQL 사용 후
◎DAO
public List<BoardVO> getBoardList(BoardVO vo) {
return mybatis.selectList("BoardDAO.getBoardList", vo);
}
◎mapping.xml
<select id="getBoardList" resultMap="boardResult">
SELECT * FROM BOARD
<if test = "searchCondition == 'TITLE'">
<![CDATA[
WHERE TITLE LIKE '%'||#{searchKeyword}||'%'
]]>
</if>
<if test = "searchCondition == 'CONTENT'">
<![CDATA[
WHERE CONTENT LIKE '%'||#{searchKeyword}||'%'
]]>
</if>
<if test = "searchCondition == 'WRITER'">
<![CDATA[
WHERE WRITER LIKE '%'||#{searchKeyword}||'%'
]]>
</if>
ORDER BY SEQ DESC
</select>
위와 같이 mapping 파일 내에서 조건문을 사용할 수 있다.
반응형
'[JAVA] > Mybatis' 카테고리의 다른 글
[Mybatis] SQL 쿼리문을 실행하는 두가지 방법 (0) | 2021.07.01 |
---|---|
[Mybatis] JavaORM plugin (0) | 2021.06.30 |
[Spring] Mybatis 사용 (0) | 2021.06.29 |
[Mybatis] Mapper Elements (0) | 2021.06.29 |
[Mybatis] Mybatis 프레임워크 기초 (0) | 2021.06.29 |
Comments
최근에 올라온 글
최근에 달린 댓글
TAG
- Promise
- react-native
- AsyncStorage
- 이탈리안 레스토랑
- javascript
- redux
- 인천 구월동 맛집
- react
- 맛집
- 파니노구스토
- await
- redux-thunk
- 인천 구월동 이탈리안 맛집
- 정보보안기사 #실기 #정리
- Async
- Total
- Today
- Yesterday