스프링 웹 프로젝트 MVC - 책 목록 만들기, 책 검색 기능 추가하기 07
책 목록 개요
책 목록을 보여주기 위한 기능을 만든다.
브라우저에서 /list 주소에 접속하면 책 목록이 보여진다.
책 목록은 최신순으로 보여지게 된다.
책 목록 쿼리 작성
src/main/resources/sqlmap/book_SQL.xml
// book_SQL.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="book">
... (생략) ...
<select id="select_list" parameterType="hashMap" resultType="hashMap">
<![CDATA[
select
book_id,
title,
category,
price,
insert_date
from
book
order by insert_date desc
]]>
</select>
</mapper>
책 목록 DAO 메소드 작성
책 목록 데이터베이스에 접속하는 메소드를 작성한다.
src/main/java/sample/spring/codehows/BookDao.java
추
public List<Map<String, Object>> selectList(Map<String, Object> map) {
return this.sqlSessionTemplate.selectList("book.select_list", map);
}
책 목록 서비스 클래스 메소드 생성
src/main/java/sample/spring/codehows/BookServiceImpl.java
@Override
public List<Map<String, Object>> list(Map<String, Object> map){
return this.bookDao.selectList(map);
}
책 목록 DAO를 곧바로 리턴하는 서비스 메소드를 만든다.
책 목록 서비스 인터페이스 메소드 시그니쳐 생성
BookService.java에 추가됨
List<Map<String, Object>> list(Map<String, Object> map);
책 목록 컨트롤러 메소드 추가
// BookController.java
@RequestMapping(value = "list")
public ModelAndView list(@RequestParam Map<String, Object> map) {
List<Map<String, Object>> list = this.bookService.list(map);
ModelAndView mav = new ModelAndView();
mav.addObject("data", list);
mav.setViewName("/book/list");
return mav;
}
책 목록 뷰 작성
책 목록 뷰를 생성한다. src => main => webapp => WEB-INF => views => book 우클릭 후 new -> file 을 선택하고 파일 이름을 list.jsp로 생성하면 된다.
// list.jsp
<%@ page pageEncoding="UTF-8" contentType="text/html;charset=utf-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<title>책 목록</title>
</head>
<body>
<h1>책 목록</h1>
<table>
<thead>
<tr>
<td>제목</td>
<td>카테고리</td>
<td>가격</td>
</tr>
</thead>
<tbody>
<c:forEach var="row" items="${data}">
<tr>
<td>
<a href="/detail?bookId=${row.book_id}">
${row.title}
</a>
</td>
<td>${row.category}</td>
<td><fmt:formatNumber type="number" maxFractionDigits="3" value="${row.price}" /></td>
</tr>
</c:forEach>
</tbody>
</table>
<p>
<a href="/create">생성</a>
</p>
</body>
</html>
책 목록 화면 확인
책 검색 기능 개요
책 목록을 검색하기 위한 기능을 만든다.
목록 화면에서 검색어를 입력하고 검색 버튼 클릭하면 검색 주소로 이동한다. 검색 주소는 /list?keyword=검색어 형식이다.
책 검색 쿼리 작성
기존의 책 목록 쿼리 select_list 를 수정해서 검색 기능을 추가한다
추가하
// book_SQL.xml
<select id="select_list" parameterType="hashMap" resultType="hashMap">
<![CDATA[
select
book_id,
title,
category,
price,
insert_date
from
book
where 1 = 1
]]>
<if test="keyword != null and keyword != ''">
and (title like CONCAT('%',#{keyword},'%') or category like CONCAT('%',#{keyword},'%'))
</if>
order by insert_date desc
</select>
책 검색 컨트롤러 메소드 추가
컨트롤러에 검색 파라미터를 처리하는 부분을 추가한다. 키워드 파라미터가 있다면 뷰의 검색 상자에 보여지게 할 것이다.
list 메소드에서 뷰로 키워드 데이터를 전달하는 부분을 수정한다.
// BookController.java
@RequestMapping(value = "list")
public ModelAndView list(@RequestParam Map<String, Object> map) {
... 생략 ...
mav.addObject("data", list);
if (map.containsKey("keyword")) {
mav.addObject("keyword", map.get("keyword"));
}
... 생략 ...
}
책 검색 뷰 수정
책 검색 뷰를 수정해서 검색창이 보이도록 한다.
... 생략...
<h1>책 목록</h1>
<p>
<form>
<input type="text" placeholder="검색" name="keyword" value="${keyword}" />
<input type="submit" value="검색" />
</form>
</p>
<table>
... 생략 ...
수정된 부분은 아래와 같다.
<p>
<form>
<input type="text" placeholder="검색" name="keyword" value="${keyword}" />
<input type="submit" value="검색" />
</form>
</p>
검색창 영역을 추가한다.
<form 태그의 기본 HTTP 메소드는 GET이기 때문에 검색 버튼을 클릭하면 검색 파라미터가 있는 목록 페이지 /list?keyword=검색어로 이동한다.
책 검색 기능 확인
책 목록 페이지 http://localhost:8080/list에 접속한다.