[싱글이의 영수증] 검색하기
업데이트:
싱글이의 영수증 검색하기
Controller
게시글 목록에서 주소 조합작업을 통해 만들어진 URL을 통해 파라미터를 얻어온다.
검색된 게시글 페이징 처리를 위한 객체를 생성한 후 검색 조건에 맞는 게시글 수를 조회한다
검색 조건이 카테고리, 정렬, 검색 옵션, 검색어 총 4종류이기 때문에 동적sql을 이용해서 카테고리가 비어있지 않을때, 정렬이 비어있지 않을때, 검색어가 비어있지 않을 때로 나눠서 조건을 추가한다
게시글 수를 조회한 후 검색 조건에 맞는 게시글 목록을 조회한다.
목록 조회 마찬가지로 동적sql을 이용해 조건에 맞춰 sql을 조합한다.
@RequestMapping("search")
public String searchBoard(@RequestParam(value="cp", required=false, defaultValue ="1") int cp,
@RequestParam(value="sk",required = false) String sk,
@RequestParam(value="sv",required = false) String sv,
@RequestParam(value="ct",required = false) String ct,
@RequestParam(value="sort",required = false) String sort,
@ModelAttribute("rSearch") ReviewSearch rSearch,
Model model) {
rSearch.setSk(sk);
rSearch.setSv(sv);
rSearch.setCt(ct);
rSearch.setSort(sort);
ReviewPageInfo pInfo = service.getSearchPageInfo(rSearch,cp);
List<Review> rList = service.selectSearchList(rSearch,pInfo);
if(!rList.isEmpty()) {
List<ReviewAttachment> thList = service.selectThumbnailList(rList);
model.addAttribute("thList",thList);
}
model.addAttribute("rList",rList);
model.addAttribute("pInfo",pInfo);
model.addAttribute("rSearch",rSearch);
return "review/reviewList";
}
- 검색 조건이 포함된 페이징 정보 얻어오기
Service
ReviewPageInfo getSearchPageInfo(ReviewSearch rSearch, int cp);
ServiceImpl
@Override
public ReviewPageInfo getSearchPageInfo(ReviewSearch rSearch, int cp) {
// 검색 조건에 맞는 게시글 수 조회
int listCount = dao.getSearchListCount(rSearch);
return new ReviewPageInfo(cp, listCount, '2');
}
DAO
public int getSearchListCount(ReviewSearch rSearch) {
return sqlSession.selectOne("reviewMapper.getSearchListCount", rSearch);
}
Mapper
<select id="getSearchListCount" parameterType="ReviewSearch" resultType="_int">
SELECT COUNT(*) FROM V_BOARD
WHERE STATUS = 'N'
AND BOARD_CD ='2'
<!-- 넘어오는 값,, ct(카테고리), sk, sv , sort(정렬) -->
<if test="ct != null">
<choose>
<when test="ct == 1">
AND CATEGORY_CD = 21
</when>
<when test="ct== 2">
AND CATEGORY_CD = 22
</when>
<when test="ct == 3">
AND CATEGORY_CD = 23
</when>
<when test="ct == 4">
AND CATEGORY_CD = 24
</when>
</choose>
</if>
<if test="sv != null">
<bind name="val" value="'%' + sv + '%'" /> <!-- bind : 변수처럼 사용가능한 동적 sql -->
<!-- '%' || #{sv} || '%' ->를 묵어서 val이라고 부르겠다. #{}제외, ||-> +로 변경 -->
AND
<choose>
<when test="sk == 'title'">
BOARD_TITLE like #{val}
</when>
<when test="sk == 'writer'">
NICKNAME like #{val}
</when>
<when test="sk == 'titcont'">
(BOARD_TITLE like #{val} OR BOARD_CONTENT like #{val})
</when>
</choose>
</if>
</select>
- 검색된 게시글 목록 조회
Service
List<Review> selectSearchList(ReviewSearch rSearch, ReviewPageInfo pInfo);
ServiceImpl
@Override
public List<Review> selectSearchList(ReviewSearch rSearch, ReviewPageInfo pInfo) {
return dao.selectSearchList(rSearch,pInfo);
}
DAO
public List<Review> selectSearchList(ReviewSearch rSearch, ReviewPageInfo pInfo) {
int offset = (pInfo.getCurrentPage()-1) * pInfo.getLimit();
RowBounds rowBounds = new RowBounds(offset, pInfo.getLimit());
return sqlSession.selectList("reviewMapper.selectSearchList", rSearch, rowBounds);
}
Mapper
<select id="selectSearchList" parameterType="ReviewSearch" resultMap="review_rm">
SELECT * FROM V_BOARD
WHERE STATUS = 'N'
AND BOARD_CD ='2'
<!-- 넘어오는 값,, ct(카테고리), sk, sv , sort(정렬) -->
<if test="ct != null">
<choose>
<when test="ct == 1">
AND CATEGORY_CD = 21
</when>
<when test="ct== 2">
AND CATEGORY_CD = 22
</when>
<when test="ct == 3">
AND CATEGORY_CD = 23
</when>
<when test="ct == 4">
AND CATEGORY_CD = 24
</when>
</choose>
</if>
<if test="sv != null">
<bind name="val" value="'%' + sv + '%'" /> <!-- bind : 변수처럼 사용가능한 동적 sql -->
<!-- '%' || #{sv} || '%' ->를 묵어서 val이라고 부르겠다. #{}제외, ||-> +로 변경 -->
AND
<choose>
<when test="sk == 'title'">
BOARD_TITLE like #{val}
</when>
<when test="sk == 'writer'">
NICKNAME like #{val}
</when>
<when test="sk == 'titcont'">
(BOARD_TITLE like #{val} OR BOARD_CONTENT like #{val})
</when>
</choose>
</if>
<if test="sort != null">
<choose>
<when test="sort == 'like'">
ORDER BY LIKE_COUNT DESC, BOARD_NO DESC
</when>
<otherwise>
ORDER BY BOARD_NO DESC
</otherwise>
</choose>
</if>
<if test="sort == null">
ORDER BY BOARD_NO DESC
</if>
</select>
- 검색된 게시글 썸네일 조회
Service
List<ReviewAttachment> selectThumbnailList(List<Review> rList);
ServiceImpl
@Override
public List<ReviewAttachment> selectThumbnailList(List<Review> rList) {
return dao.selectThumbnailList(rList);
}
DAO
public List<ReviewAttachment> selectThumbnailList(List<Review> rList) {
return sqlSession.selectList("reviewMapper.selectThumbnailList",rList);
}
Mapper
<select id="selectThumbnailList" parameterType="list" resultMap="attachment_rm">
SELECT * FROM BOARD_FILE
WHERE FILE_LEVEL = 1
AND PARENT_BOARD_NO IN
<foreach collection="list" item="review" open="(" close=")" separator=",">
#{review.boardNo}
</foreach>
</select>
공유하기
Twitter Google+ LinkedIn
댓글남기기