공부/Spring
[Spring] 게시판 만들기 : 게시글 검색
students
2022. 9. 10. 03:08
1) BoardController.java
@RequestMapping("mainPage")
public String mainPage(Model model, String category, String keyword,
@RequestParam(value = "pageNum", defaultValue = "1") int pageNum) {
ArrayList<HashMap<String, Object>> dataList = boardService.getBoardList(category, keyword, pageNum);
int count = boardService.getBoardCount();
int totalPageCount = (int) Math.ceil(count / 10.0);
// 1 2 3 4 5 , 6 7 8 9 10
int startPage = ((pageNum - 1) / 5) * 5 + 1;
int endPage = ((pageNum - 1) / 5 + 1) * (5);
if (endPage > totalPageCount) {
endPage = totalPageCount;
}
// 페이징 링크 검색 추가 옵션...
String additionalParam = "";
if (category != null) {
additionalParam += "&category=" + category;
}
if (keyword != null) {
// URL encoding -> 영어 숫자 특수 문자 아닌 값이 존재 할때...
try {
keyword = URLEncoder.encode(keyword, "utf-8");
} catch (Exception e) {
e.printStackTrace();
}
additionalParam += "&searchWord=" + keyword;
}
model.addAttribute("additionalParam", additionalParam);
model.addAttribute("count", count);
model.addAttribute("startPage", startPage);
model.addAttribute("endPage", endPage);
model.addAttribute("currentPage", pageNum);
model.addAttribute("totalPageCount", totalPageCount);
model.addAttribute("dataList", dataList);
return "board/mainPage";
}
2) BoardService.java
public ArrayList<HashMap<String, Object>> getBoardList(String category, String keyword, int pageNum) {
ArrayList<HashMap<String, Object>> dataList = new ArrayList<HashMap<String, Object>>();
ArrayList<BoardVo> boardVoList = boardSQLMapper.getBoardList(pageNum);
if (category != null) {
switch (category) {
case "title":
boardVoList = boardSQLMapper.getBoardByTitle(keyword);
System.out.println("title : " + keyword + "");
break;
case "content":
boardVoList = boardSQLMapper.getBoardByContent(keyword);
System.out.println("content : " + keyword + "");
break;
case "nick":
boardVoList = boardSQLMapper.getBoardByNickName(keyword);
System.out.println("nick : " + keyword + "");
break;
}
}
for (BoardVo boardVo : boardVoList) {
int userNo = boardVo.getUser_no(); // 작성자 번호...
UserVo userVo = userSQLMapper.getUserByNo(userNo); // SELECT * FROM FP_MEMBER WHERE member_no = #{no}
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("userVo", userVo);
map.put("boardVo", boardVo);
// 현재 글이...지금시간 -3 시간 보다 클때...
Date writeDate = boardVo.getBoard_writedate();
long writeTime = writeDate.getTime();
long currentTime = System.currentTimeMillis();
long targetTime = currentTime - 1000 * 60 * 60 * 3;
if (writeTime > targetTime) {
map.put("newKeyword", true);
}
dataList.add(map);
}
return dataList;
}
3) BoardSQLMapper.java
/*게시글 제목 검색 목록 출력 */
public ArrayList<BoardVo> getBoardByTitle(String titlte);
/* 게시글 내용 검색 목록 출력 */
public ArrayList<BoardVo> getBoardByContent(String content);
/* 게시글 작성자 검색 목록 출력 */
public ArrayList<BoardVo> getBoardByNickName(String nickname);
4) BoardSQLMapper.xml
<select id="getBoardByTitle" resultType="com.spring.example.vo.BoardVo">
SELECT t2.* FROM (
SELECT t1.* , ROWNUM AS rnum FROM (SELECT fb.* FROM EXAMPLE_BOARD fb , EXAMPLE_USER fm
WHERE fb.user_no = fm.user_no AND board_title LIKE '%' || #{title} || '%' ORDER BY fb.board_no DESC
) t1
) t2
</select>
<select id="getBoardByContent" resultType="com.spring.example.vo.BoardVo">
SELECT t2.* FROM (
SELECT t1.* , ROWNUM AS rnum FROM (SELECT fb.* FROM EXAMPLE_BOARD fb , EXAMPLE_USER fm
WHERE fb.user_no = fm.user_no AND board_content LIKE '%' || #{content} || '%' ORDER BY fb.board_no DESC
) t1
) t2
</select>
<select id="getBoardByNickName" resultType="com.spring.example.vo.BoardVo">
SELECT t2.* FROM (
SELECT t1.* , ROWNUM AS rnum FROM (SELECT fb.* FROM EXAMPLE_BOARD fb , EXAMPLE_USER fm
WHERE fb.user_no = fm.user_no AND fm.user_nickname LIKE '%' || #{nickname} || '%' ORDER BY fb.board_no DESC
) t1
) t2
</select>