고래씌
[Spring] 6-2. 게시판 검색기능 본문
1. 게시판 검색기능
=> paramMap에 condition이랑 keyword, boardCode 가 다 담긴다! 그래서 별도로 BoardController에 추가하지 않아도 된다.
=> 검색창에 작성자로 설정해놓고 "ddd"라는 값을 입력했을 때 log에 값이 담긴 것을 확인할 수 있다.
=> 그래서 바로 board-mapper.xml로 가서 코드 수정만 하면된다!
▶ board-mapper.xml
=> 페이징과 게시글 목록을 불러오는 코드를 모두 다음과 같이 수정함
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="boardMapper">
<!-- 페이징 -->
<select id="selectListCount" parameterType="map" resultType="int">
SELECT COUNT(*)
FROM BOARD B
LEFT JOIN MEMBER M ON (BOARD_WRITER = USER_NO)
WHERE B.STATUS = 'Y' AND BOARD_CD= #{boardCode}
<if test="keyword != null and keyword != ''">
AND
<choose>
<when test="condition == 'title'">
BOARD_TITLE LIKE '%${keyword}%'
</when>
<when test="condition.equals('content')">
BOARD_CONTENT LIKE '%' || #{keyword} || '%'
</when>
<when test="condition.equals('writer')">
USER_NAME LIKE CONCAT(CONCAT('%', #{keyword}), '%')
</when>
<when test="condition.equals('titleAndContent')">
(BOARD_TITLE LIKE '%${keyword}%')
OR
(BOARD_CONTENT LIKE '%' || #{keyword} || '%')
<!-- 괄호를 써야 한다! OR 연산자를 사용할 때는 -->
</when>
</choose>
</if>
</select>
<!-- 게시글 목록 -->
<!-- 결과값은 board로 담아줘야함 -->
<select id="selectList" resultType="board" parameterType="map">
SELECT BOARD_NO, BOARD_TITLE, M.USER_NAME AS BOARD_WRITER, BOARD_CONTENT, COUNT, CREATE_DATE
FROM BOARD B
LEFT JOIN MEMBER M ON (BOARD_WRITER = USER_NO)
WHERE B.STATUS='Y' AND BOARD_CD= #{boardCode}
<!-- 검색값이 null이 아니라면 -->
<if test="keyword != null and keyword != ''">
AND
<choose>
<when test="condition == 'title'">
BOARD_TITLE LIKE '%${keyword}%'
</when>
<when test="condition.equals('content')">
BOARD_CONTENT LIKE '%' || #{keyword} || '%'
</when>
<when test="condition.equals('writer')">
USER_NAME LIKE CONCAT(CONCAT('%', #{keyword}), '%')
</when>
<when test="condition.equals('titleAndContent')">
(BOARD_TITLE LIKE '%${keyword}%')
OR
(BOARD_CONTENT LIKE '%' || #{keyword} || '%')
<!-- 괄호를 써야 한다! OR 연산자를 사용할 때는 -->
</when>
</choose>
</if>
ORDER BY BOARD_NO DESC
</select>
</mapper>
▶ boardListView.jsp
=> 검색을 했을 때 검색한 게시글 목록만 조회되도록 함수 지정
=> 모두 ${sUrl} 추가
=> keyword 친 값이 저장되도록 input value에 ${param.keyword} 저장하고, form action=${boardCode} 추가
=> 검색을 하고 나서 선택했던 select값이 변하지 않도록 ${param.condition eq '~' ? 'selected' : ''} 추가.(~와 같다면 selected 값이 반환이 되고 아니면 빈값이 반환되도록 설정
'Server > Spring' 카테고리의 다른 글
[Spring] 8-1. 일반 게시글 등록(크로스사이트스크립트 공격 방지) (0) | 2024.01.24 |
---|---|
[Spring] 7. Application 전역에 있는 데이터를 저장(Intercepter) (0) | 2024.01.24 |
[Spring] 6-1. 게시판 목록, 페이징 (0) | 2024.01.23 |
[Spring] 5. 비동기 요청 처리 기능(아이디 중복검사, 회원 정보 조회) (0) | 2024.01.23 |
[Spring] 4. 예외처리 (0) | 2024.01.23 |