본문 바로가기
IT/Java

spring 예제 part.12

by 성준하이 2021. 12. 26.
반응형

여기서 끝내려고 했으나 추가적으로 리스트에 검색 기능 까지만 추가를 해볼것이다.

 

  • sql 파일에 if문을 줘서 검색이 있을시 추가로 돌릴 코드를 추가

 

맨 아래 

order by insert_date desc  

]]>  

를 지워주고 추가로 이렇게 작성을 한다.

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 는 이렇게 된다.

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>

간단하게 설명을 하자면 order by는 항상 쿼리의 마지막에 와야하므로 뒤로 빼고 검색할시에 keyword 부분이 null이 아니라면 where 문에 and 부터 비교절이 들어간다.

where 이하절에는 true인 값이 있어야하는데 where 1=1 은 항상 참이기에 코드를 이렇게 동적 쿼리로 짰다.

concat함수는 데이터베이스에서 string 값을 붙일때 사용하는 함수이고 %는 와일드 기호라고 하여 어떤 단어나 문자열이든 올수 있음을 뜻한다.

 

다음은 컨트롤러 부분에 dao로 검색값을 넘겨주는 코드를 추가해보자.

 

mav에 data를 담는것처럼 하나 더 추가하여 키워드를 담는다.

이렇게 될것이다.

  • 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);
if (map.containsKey("keyword")) {
mav.addObject("keyword", map.get("keyword"));
}
mav.setViewName("/book/list");
return mav;
}


전체 코드는 이렇게 된다.
다음은 view에서 테이블 전에 검색어를 입력받을 칸을 만들어주자.

  • 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>
<p>
<form>
<input type="text" placeholder="검색" name="keyword" value="${keyword}" />
<input type="submit" value="검색" />
</form>
</p>
<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>

그럼 이렇게 일부분을 검색해도 리스트에 나오게 된다.

 

다음 포스팅에서는 spring 에 대한 마무리 얘기로 spring 포스팅을 끝내볼것이다.

반응형

'IT > Java' 카테고리의 다른 글

Long,long / int,Integer 차이  (6) 2022.01.03
spring 예제 part.final  (0) 2021.12.27
spring 예제 part.11  (0) 2021.12.25
spring 예제 part.10  (0) 2021.12.24
spring 예제 part.9  (0) 2021.12.23

댓글