Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

기록

JAVA sping BOOK 테이블 list 띄우기 본문

JAVA

JAVA sping BOOK 테이블 list 띄우기

9400 2023. 1. 31. 17:48

book/list.jsp

<%@ page language="java" contentType="text/html;charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="/resources/js/jquery-3.6.0.js"></script>
<title>도서관리시스템</title>
</head>
<body>
<!-- 검색 시작 -->
<p>
	<!-- action 속성 및 그 값이 생략시, 현재 URI(/list)를 재요청
	method는 GET(form태그의 기본 HTTP 메소드는 GET임) -->
	<form>
		<!-- /list?keyword=개똥이 -->
		<input type="text" name="keyword" value="" 
			placeholder="검색어를 입력하세요" />
		<input type="submit" value="검색" />
	</form>
	
</p>

<%-- ${data} --%>
<table border="1">
<thead>
	<tr>
		<th>번호</th>
		<th>제목</th>
		<th>카테고리</th>
		<th>가격</th>
	</tr>
</thead>
<tbody>
	<c:forEach var="bookVO" items="${data}" varStatus="stat">
	<!-- 
		 bookVO[rnum=1, bookId=32, title=제목30, category=카테고리30, price=10000, 
		 insertDate=Wed Jan 25 11:44:40 KST 2023, content=내용30]
		 
		 forEach태그? 배열(String[][], int[][]), Collection(List, Set) 또는
		 		Map(HashTable, HashMap, SortedMap)에 저장되어 있는 값들을
		 		순차적으로 처리할 때 사용함. 자바의 for, do~while을 대신하여 사용
		 		
		 data : mav.addObject("data",bookVOList)
		 data : List<BookVO>
		 var : 변수(variable)
		 items : 아이템(배열, Collection, Map)
		 varStatus : 루프 정보를 담은 객체
		 	- index : 루프(반복) 실행 시 현재 인덱스(0부터 시작)
		 	- count : 실행 회수(1부터 시작, 보통 행번호를 출력)
		 -->
		<tr>
			<td>${bookVO.rnum}</td>
			<td><a href="detail?bookId=${bookVO.bookId}">${bookVO.title}</a></td>
			<td>${bookVO.category}</td>
			<td><fmt:formatNumber type="number" maxFractionDigits="3" value="${bookVO.price}"/></td>
		</tr>
	</c:forEach>
</tbody>
</table>
</body>
</html>

 

컨트롤러(+검색포함)

   // 1) 요청 URI : /list
   // 		요청 파라미터 : {}
   // 2) 요청 URI : /list?keyword=핑구
   // 		요청 파라미터 : {"keyword" : "핑구"}
   // 방식 : get
   // 스프링에서 요청 파라미터를 매개변수로 받을 수 있음
   @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("keyword : " + keyword);
	   log.info("bookVOList : " + bookVOList.toString());
	   // 데이터
	   mav.addObject("data", bookVOList);
	   // jsp(뷰) : book폴더에 있는 list.jsp를 forwarding(jsp를 해석, 컴파일하여 html로 리턴)
	   mav.setViewName("book/list");
	   return mav;
   }

 

서비스

	@Override
	public List<BookVO> list(String keyword){
		return bookDao.list(keyword);
	}

 

DAO

	//책 목록
	//리턴타입 : List<BookVO>
	public List<BookVO> list(String keyword){
		//.selectOne()  : 1행(상세보기)
		//.selectList() : 여러행(목록)
		return this.sqlSessionTemplate.selectList("book.list",keyword);
	}

 

mapper

  	 <!-- 책 목록 
  	 parameterType : String keyword
  	 where 1 = 1은 늘 참임
  	 조건이 2개 이상일때 where + and 
  	 조건이 1개일때 where이어야함
  	 -->
  	 <select id="list" parameterType="String" resultType="bookVO">
	WITH T AS(
	    SELECT ROW_NUMBER() OVER(ORDER BY BOOK_ID DESC) RNUM
	    , ROWNUM NUM1
	    , 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>

 

Comments