romworld

Spring 07 - 도서 CRUD(6) - 검색 기능 본문

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 끝났으므로 다음 편에선 부트스트랩을 적용해보자!

Comments