17. 게시글 검색
boardList.html 검색창 부분 경로 설정 및 name값 확인

BoardController 게시글 목록 조회 메서드 수정
@GetMapping("{boardCode:[0-9]+}")
public String selectBoardList(@PathVariable("boardCode") int boardCode,
@RequestParam(value="cp", required = false, defaultValue = "1") int cp,
Model model,
@RequestParam Map<String, Object> paramMap) {
log.debug("bodeCode : " + boardCode);
Map<String, Object> map = null;
if(paramMap.get("key") == null) {
map = service.selectBoardList(boardCode, cp);
} else {
paramMap.put("boardCode", boardCode);
map = service.searchList(paramMap, cp);
}
model.addAttribute("pagination", map.get("pagination"));
model.addAttribute("boardList", map.get("boardList"));
return "board/boardList";
}
BoardServiceImpl(게시글 목록 조회 참고)
@Override
public Map<String, Object> searchList(Map<String, Object> paramMap, int cp) {
int listCount = mapper.getSearchCount(paramMap);
Pagination pagination = new Pagination(cp, listCount);
int limit = pagination.getLimit();
int offset = (cp - 1) * limit;
RowBounds rowBounds = new RowBounds(offset, limit);
List<Board> boardList = mapper.selectSearchList(paramMap, rowBounds);
Map<String, Object> map = new HashMap<>();
map.put("pagination", pagination);
map.put("boardList", boardList);
return map;
}
board-mapper.xml
<select id="getSearchCount">
SELECT COUNT(*)
FROM "BOARD"
<if test='key=="w"'>
JOIN "MEMBER" USING(MEMBER_NO)
</if>
WHERE BOARD_DEL_FL = 'N'
AND BOARD_CODE = #{boardCode}
<choose>
<when test='key=="t"'>
AND BOARD_TITLE LIKE '%' || #{query} || '%'
</when>
<when test='key=="c"'>
AND BOARD_CONTENT LIKE '%' || #{query} || '%'
</when>
<when test='key=="tc"'>
AND (
BOARD_CONTENT LIKE '%' || #{query} || '%'
OR
BOARD_TITLE LIKE '%' || #{query} || '%'
)
</when>
<otherwise>
AND MEMBER_NICKNAME LIKE '%' || #{query} || '%'
</otherwise>
</choose>
</select>
<select id="selectSearchList">
SELECT BOARD_NO, BOARD_TITLE, MEMBER_NICKNAME, READ_COUNT,
(SELECT COUNT(*)
FROM "COMMENT" C
WHERE C.BOARD_NO = B.BOARD_NO) COMMENT_COUNT,
(SELECT COUNT(*)
FROM "BOARD_LIKE" L
WHERE L.BOARD_NO = B.BOARD_NO) LIKE_COUNT,
<![CDATA[
CASE
WHEN SYSDATE - BOARD_WRITE_DATE < 1 / 24 / 60
THEN FLOOR((SYSDATE - BOARD_WRITE_DATE) * 24 * 60 * 60) || '초 전'
WHEN SYSDATE - BOARD_WRITE_DATE < 1 / 24
THEN FLOOR((SYSDATE - BOARD_WRITE_DATE) * 24 * 60) || '분 전'
WHEN SYSDATE - BOARD_WRITE_DATE < 1
THEN FLOOR((SYSDATE - BOARD_WRITE_DATE) * 24) || '시간 전'
ELSE TO_CHAR(BOARD_WRITE_DATE, 'YYYY-MM-DD')
END BOARD_WRITE_DATE
]]>
FROM "BOARD" B
JOIN "MEMBER" USING(MEMBER_NO)
WHERE BOARD_DEL_FL = 'N'
AND BOARD_CODE = #{boardCode}
<choose>
<when test='key=="t"'>
AND BOARD_TITLE LIKE '%' || #{query} || '%'
</when>
<when test='key=="c"'>
AND BOARD_CONTENT LIKE '%' || #{query} || '%'
</when>
<when test='key=="tc"'>
AND (
BOARD_CONTENT LIKE '%' || #{query} || '%'
OR
BOARD_TITLE LIKE '%' || #{query} || '%'
)
</when>
<otherwise>
AND MEMBER_NICKNAME LIKE '%' || #{query} || '%'
</otherwise>
</choose>
ORDER BY BOARD_NO DESC
</select>
boardList.html 페이지네이션 출력 관련하여 분기 처리





