Spring
Spring 07 - 도서 CRUD(6) - 검색 기능
inderrom
2023. 1. 25. 15:14
<list.jsp> 추가
body 태그 바로 첫줄에 검색 기능을 만들어보자.
<!-- 검색 시작 -->
<p>
<!--
action 속성 및 그 값이 생략 시 , 현재 URI(/list)를 재요청.
method는 GET(form 태그의 기본 HTTP 메소드는 GET임)
-->
<!-- <form action="/list" method="get"> -->
<form>
<input type="text" name="keyword" value="${param.keyword}"
placeholder="검색어를 입력해주세요." />
<!-- /list?keyword=새롬이 -->
<input type="submit" value="검색" />
</form>
</p>
<!-- 검색 끝 -->
<BookController.java>
list메서드를 고쳐준다.
// 1)요청URI : /list
// 요청파라미터 : {}
// 2)요청URI : /list?keyword=새롬이
// 요청파라미터 : {"keyword" :"새롬이"
// 요청 파라미터 : {}
// 방식 : get
// 스프링에서 요청파라미터를 매개변수로 받을 수 있음
//required=false 파라미터가 넘어오는 게 없을 수도 있다.
@RequestMapping(value="/list",method=RequestMethod.GET)
public ModelAndView list(ModelAndView mav,
@RequestParam(value="keyword", required=false) String keyword) {
List<BookVO> bookVOList = this.bookService.list(keyword);
log.info("bookVOList : " + bookVOList);
// 데이터
mav.addObject("data", bookVOList);
// jsp(뷰) : book폴더에 있는 list.jsp를 forwarding(jsp를 해석, 컴파일하여 html로 리턴)
mav.setViewName("book/list");
return mav;
}
파라미터에 keyword라는 매개변수를 추가했으므로 dao, service에 있는 list 메소드에 파라미터를 똑같이 추가해준다.
또한 mapper도 고쳐준다
<book_SQL.xml>
<!--
책 목록
parameterType : String keyword
WHERE 1 = 1은 늘 참(true)임
조건이 2개 이상일 때 where + and
조건이 1개일 때 생략 + where이어야 함
=> WHERE 1 = 1로 개선
조건이 2개 이상일 때 and + and
조건이 1개일 때 생략 + and이어야함
-->
<select id="list" parameterType="String" resultType="bookVO">
WITH T AS(
SELECT ROW_NUMBER() OVER(ORDER BY BOOK_ID DESC) RNUM
, BOOK_ID, TITLE, CATEGORY, PRICE, INSERT_DATE, CONTENT
FROM BOOK
WHERE 1 = 1
<if test="keyword!=null and keyword!=''">
AND(
TITLE LIKE '%' || #{keyword} || '%'
OR CATEGORY LIKE '%' || #{keyword} || '%'
OR CONTENT LIKE '%' || #{keyword} || '%'
)
</if>
)
SELECT T.RNUM, T.BOOK_ID, T.TITLE, T.CATEGORY, T.PRICE
, T.INSERT_DATE, T.CONTENT
FROM T
</select>
검색을 해보면 (26을 입력했을 때)
해당 항목만 검색되는 걸 볼 수 있다.
list.jsp에서 input value="${param.keyword}"를 해줌으로써 검색 기록이 지워지지 않고 고정된다.
도 서 C R U D 끝났으므로 다음 편에선 부트스트랩을 적용해보자!