공부/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>

 

5) 실행화면