MyBatis + MVC 실습 (6) : 검색 기능
부트캠프(END)/-Web 실습2022. 8. 8. 14:40
지역별 맛집을 검색해서 리스트를 출력해 주는 기능을 만들어 보자.
아래처럼 키워드를 입력하고 검색 버튼을 누르면 그 아래 영역에 검색 결과를 출력할 것이다.
1. 검색 결과 리스트와 수를 출력할 mapper 코드를 작성한다.
mapper.xml
LIKE문을 사용할 때 작은 따옴표(')와 | 기호를 써야 하는 점에 유의한다!
<select id="foodLocationFindData" resultType="FoodVO" parameterType="hashmap">
SELECT fno, name, score, poster, type, address, num
FROM (SELECT fno, name, score, poster, type, address, rownum as num
FROM (SELECT fno, name, score, poster, type, address
FROM food_location WHERE address LIKE '%'||#{address}||'%' ORDER BY fno ASC))
WHERE num BETWEEN #{start} AND #{end}
</select>
<select id="foodLocationFindTotalPage" resultType="int" parameterType="String">
SELECT CEIL(COUNT(*)/12.0) FROM food_location
WHERE address LIKE '%'||#{address}||'%'
</select>
2. 데이터베이스에 연결해서 결과를 받아 올 메서드를 DAO에서 구현한다.
DAO.java(Class)
public static List < FoodVO > foodLocationFindData(Map map) {
List < FoodVO > list = null;
SqlSession session = null;
try {
session = ssf.openSession();
list = session.selectList("foodLocationFindData", map);
} catch (Exception ex) {
} finally {
if (session != null)
session.close();
}
return list;
}
public static int foodLocationFindTotalPage(String address) {
int total = 0;
SqlSession session = null;
try {
session = ssf.openSession();
total = session.selectOne("foodLocationFindTotalPage", address);
} catch (Exception ex) {
} finally {
if (session != null)
session.close();
}
return total;
}
3. 메서드에 어떻게 값을 넣고 화면에 출력할 값을 보내줄 Model 코드를 작성한다.
Model.java (Class)
@RequestMapping("food/food_find.do")
public String food_find(HttpServletRequest request, HttpServletResponse response) {
try {
request.setCharacterEncoding("UTF-8");
} catch (Exception ex) {}
String page = request.getParameter("page");
if (page == null)
page = "1";
String addr = request.getParameter("addr");
if (addr == null)
addr = "강남";
int curPage = Integer.parseInt(page);
int rowSize = 12;
int start = (rowSize * curPage) - (rowSize - 1);
int end = rowSize * curPage;
Map map = new HashMap();
map.put("address", addr);
map.put("start", start);
map.put("end", end);
List < FoodVO > list = FoodDAO.foodLocationFindData(map);
int totalPage = FoodDAO.foodLocationFindTotalPage(addr);
System.out.println(totalPage);
request.setAttribute("curPage", curPage);
request.setAttribute("list", list);
request.setAttribute("totalPage", totalPage);
request.setAttribute("addr", addr);
request.setAttribute("main_jsp", "../food/food_find.jsp");
return "../main/main.jsp";
}
4. 화면까지 만들면 끝~
find.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div class="wrapper row3">
<div id="breadcrumb" class="clear">
<ul>
<li><a href="#">Home</a></li>
<li><a href="#">맛집</a></li>
<li><a href="#">지역별 맛집 찾기</a></li>
</ul>
</div>
</div>
<div class="wrapper row3">
<main class="container clear">
<h2 class="sectiontitle">지역별 맛집 찾기</h2>
<div class="row inline">
<form method="post" action="../food/food_find.do">
<input type=text name=addr size=35 class="input-sm" value="${addr }">
<input type=submit value="검색" size=10 class="btn btn-sm btn-primary">
</form>
</div>
<div style="height:20px"></div>
<div class="row">
<c:forEach var="vo" items="${list }">
<div class="col-md-3">
<div class="thumbnail">
<a href="#">
<img src="${vo.poster }" style="width:100%">
<div class="caption">
<p>${vo.name } <span style="color:orange">${vo.score }</span></p>
<p>${vo.type }</p>
</div>
</a>
</div>
</div>
</c:forEach>
</div>
<div class="row">
<div class="text-center">
<a href="../food/food_find.do?addr=${addr }&page=${curPage>1?curPage-1:curPage}" class="btn btn-sm btn-danger">이전</a>
${curPage } page / ${totalPage } pages
<a href="../food/food_find.do?addr=${addr }&page=${curPage<totalPage?curPage+1:curPage}" class="btn btn-sm btn-danger">다음</a>
</div>
</div>
</main>
</div>
</body>
</html>
'부트캠프(END) > -Web 실습' 카테고리의 다른 글
JSP로 달력 만들기(코드 참고용) (0) | 2022.08.11 |
---|---|
MyBatis + MVC 실습 (5) : 댓글 기능 (0) | 2022.08.08 |
MyBatis + MVC 실습 (4) : 로그인/로그아웃 (0) | 2022.08.05 |
댓글()