Spring

스프링 웹 프로젝트 MVC - 책 목록 만들기, 책 검색 기능 추가하기 07

로기221 2023. 3. 17. 09:33
728x90
반응형

책 목록 개요

책 목록을 보여주기 위한 기능을 만든다.
브라우저에서 /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에 접속한다.

 

 

728x90
반응형