검색 기능 (1)

HY·2025년 1월 26일

지난 포스팅을 통해,

-리다이렉트는 사용자를 처음 요청한 것과 다른 URL로 보내는 것이라는 사실을 알 수 있었다.

-addAttribute는 데이터를 key-value형태로 담아 view 페이지로 넘긴다는 사실을 알 수 있었다.

-쿼리 파라미터는 URL 뒤의 ?에 붙는 키-밸류 값이며, URL에 특정한 조건을 줄 수 있다는 사실을 알 수 있었다.

이 3가지를 조합해 검색 기능을 만들어보자.

쿼리문

	<select id="selectListByPagination" resultMap="boardResultMap">
			SELECT * 
			FROM (
			    SELECT ROW_NUMBER() OVER (ORDER BY BOARD_ID DESC) AS RN, BOARD.*
			    FROM BOARD  
			<choose>
				<when test="type == 'title'.toString()">
					WHERE BOARD_TITLE LIKE '%'||#{keyword}||'%'
				</when>
				<when test="type == 'content'.toString()">
					WHERE BOARD_CONTENT LIKE '%'||#{keyword}||'%'
				</when>
				<when test="type == 'writer'.toString()">
					WHERE MEMBER_ID LIKE '%'||#{keyword}||'%'
				</when>
			</choose>	   
			) 
			WHERE RN BETWEEN #{start} AND #{end}
	</select>

조회에 관련된 쿼리문이다.

BOARD_ID(시퀀스) 기준으로 데이터를 내림차순으로 정렬한다. 정렬된 순서에 따라 행에 번호를 부여하고 이를 RN 이라고 저장한다
그리고 BOARD 테이블에 있는 RN과 BOARD 데이터를 반환한다. 그 후 #{start}와 #{end} 사이에 있는 값 만큼의 결과를 출력한다.

이 부분은 페이지네이션이 된다.
(페이지네이션은 관련 코드가 더 있지만 일단 생략...)

쿼리문의 가운데 부분을 보면 choose 태그가 존재한다.
choose 태그 안의 when 부분은 jsp파일에서, option value에서 선택한 값과 같다.

<form id="searchForm" method="GET" action="list" class="search">
		<input type="text" name="" placeholder="검색어 입력" required> <select
			name="filterBy">
			<option value="제목">제목</option>
			<option value="내용">내용</option>
			<option value="지역">지역</option>
		</select>
		<button type="submit" class="button">검색</button>

(jsp 파일 중 검색 옵션 관련 폼)

사용자가 입력한 키워드를 찾되, option value에서 선택한 컬럼에서 검색을 시도한다.

사용자가 option value를 제목으로 선택하고, "삼겹살" 을 키워드로 검색했다면
제목에 "삼겹살" 이라는 단어가 들어가는 게시글을 페이지네이션을 적용시켜 출력한다.

profile
안녕하세요

0개의 댓글