도서 검색 처리하기
도서 검색은 도서 검색 창과 동일하다. 도서 검색 화면은 nav.jsp에 있다.
· 서버에서 요청하는 URI는 /book/user/searchBookConfirm
· 검색어는 b_name으로 서버에 전송된다.
<div class="search">
<form action="<c:url value='/book/user/searchBookConfirm' />" name="search_book_form" method="get">
<input type="text" name="b_name" placeholder="Enter the name of the book you are looking for.">
<input type="button" value="search" onclick="searchBookForm();">
</form>
</div>
컨트롤러 기능 구현
클라이언트 요청을 처리할 수 있는 메서드를 BookController.java에 선언한다.
package com.office.library.book.user;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import com.office.library.book.BookVo;
@Controller
//@Controller("user.BookController")
@RequestMapping("/book/user")
public class BookController {
@Autowired
BookService bookService;
// 도서 검색
@GetMapping("/searchBookConfirm")
public String searchBookConfirm(BookVo bookVo, Model model) {
System.out.println("[UserBookCoontroller] searchBookConfirm()");
String nextPage = "user/book/search_book";
List<BookVo> bookVos = bookService.searchBookConfirm(bookVo);
model.addAttribute("bookVos", bookVos);
return nextPage;
}
}
서비스 기능 구현
package com.office.library.book.user;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.office.library.book.BookVo;
@Service
//@Service("user.BookService")
public class BookService {
@Autowired
BookDao bookDao;
public List<BookVo> searchBookConfirm(BookVo bookVo){
System.out.println("[BookService] searchBookConfirm()");
return bookDao.selectBookBySearch(bookVo);
}
}
DAO 기능 구현
package com.office.library.book.user;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Component;
import com.office.library.book.BookVo;
@Component
//@Component("user.BookDao")
public class BookDao {
@Autowired
JdbcTemplate jdbcTemplate;
public List<BookVo> selectBookBySearch(BookVo bookVo){
System.out.println("[BookDao] selectBooks()");
String sql = "SELECT * FROM tbl_book "
+ "WHERE b_name LIKE ? "
+ "ORDER BY b_no DESC";
List<BookVo> bookVos = null;
try {
bookVos = jdbcTemplate.query(sql, new RowMapper<BookVo>() {
@Override
public BookVo mapRow(ResultSet rs, int rowNum) throws SQLException {
BookVo bookVo = new BookVo();
bookVo.setB_no(rs.getInt("b_no"));
bookVo.setB_thumbnail(rs.getString("b_thumbnail"));
bookVo.setB_name(rs.getString("b_name"));
bookVo.setB_author(rs.getString("b_author"));
bookVo.setB_publisher(rs.getString("b_publisher"));
bookVo.setB_publish_year(rs.getString("b_publish_year"));
bookVo.setB_isbn(rs.getString("b_isbn"));
bookVo.setB_call_number(rs.getString("b_call_number"));
bookVo.setB_rantal_able(rs.getInt("b_rantal_able"));
bookVo.setB_reg_date(rs.getString("b_reg_date"));
bookVo.setB_mod_date(rs.getString("b_mod_date"));
return bookVo;
}
}, "%" + bookVo.getB_name() + "%");
} catch (Exception e) {
e.printStackTrace();
}
return bookVos.size() > 0 ? bookVos : null;
}
}
도서 상세 보기 처리하기
검색 결과가 출력되는 화면은 search_book.jsp로 '도서명'을 클릭하면 해당 도서의 상세 보기 화면으로 이동할 수 있다. 도서 상세보기 기능 역시 관리자 도서 상세보기와 동일하다.
<td>
<c:url value='/book/user/bookDetail' var='detail_url'>
<c:param name='b_no' value='${item.b_no}'/>
</c:url>
<a href="${detail_url}">${item.b_name}</a>
</td>
계속해서 컨트롤러, 서비스, DAO를 구현해본다.
컨트롤러 기능 구현
// 도서 상세
@GetMapping("/bookDetail")
public String bookDetail(@RequestParam("b_no") int b_no, Model model) {
System.out.println("[UserBookController] bookDetail()");
String nextPage = "user/book/book_detail";
BookVo bookVo = bookService.bookDetail(b_no);
model.addAttribute("bookVo", bookVo);
return nextPage;
}
서비스 기능 구현
public BookVo bookDetail(int b_no) {
System.out.println("[BookService] bookDetail()");
return bookDao.selectBook(b_no);
}
DAO 기능 구현
public BookVo selectBook(int b_no) {
System.out.println("[BookDao] selectBook()");
String sql = "SELECT * FROM tbl_book WHERE b_no = ?";
List<BookVo> bookVos = null;
try {
bookVos = jdbcTemplate.query(sql, new RowMapper<BookVo>() {
@Override
public BookVo mapRow(ResultSet rs, int rowNum) throws SQLException {
BookVo bookVo = new BookVo();
bookVo.setB_no(rs.getInt("b_no"));
bookVo.setB_thumbnail(rs.getString("b_thumbnail"));
bookVo.setB_name(rs.getString("b_name"));
bookVo.setB_author(rs.getString("b_author"));
bookVo.setB_publisher(rs.getString("b_publisher"));
bookVo.setB_publish_year(rs.getString("b_publish_year"));
bookVo.setB_isbn(rs.getString("b_isbn"));
bookVo.setB_call_number(rs.getString("b_call_number"));
bookVo.setB_rantal_able(rs.getInt("b_rantal_able"));
bookVo.setB_reg_date(rs.getString("b_reg_date"));
bookVo.setB_mod_date(rs.getString("b_mod_date"));
return bookVo;
}
}, b_no);
} catch (Exception e) {
e.printStackTrace();
}
return bookVos.size() > 0 ? bookVos.get(0) : null;
}
도서 상세 화면 구현이 모두 끝났으므로 프로젝트를 실행하고 다시 도서 검색 및 상세 화면을 확인해본다.
'Spring & Springboot > 올인원 스프링 프레임워크' 카테고리의 다른 글
전자 도서관 프로젝트 - 대출 도서 반납 기능 구현 (0) | 2023.12.03 |
---|---|
전자 도서관 프로젝트 - 도서 대출 기능 구현 (0) | 2023.12.03 |
전자 도서관 프로젝트 - 도서 대출 관련 기능 구현을 위한 준비 (0) | 2023.12.03 |
전자 도서관 프로젝트 - 비밀번호 분실 처리 구현 (0) | 2023.12.02 |
전자 도서관 프로젝트 - 로그인 및 로그아웃 구현 (0) | 2023.12.02 |