[Project] 2차 프로젝트 - 검색하기

김호정's avatar
Oct 25, 2024
[Project] 2차 프로젝트 - 검색하기
  1. 쿼리 짜기
  1. DTO짜기 찾을 때 필요한 데이터 - 책 id - 제목 - 저자 - 출판사 - 책 표지 - 받을 키워드
  1. 서비스짜기 - 키워드에 아무것도 적지 않았을 때(그냥 전부 보여주기) - 키워드가 아무것도 없을 때 (검색 결과가 없습니다) - 키워드 있을 때 (DTO에 담아서 보내기)
  1. 컨트롤러 짜기
 
 
  1. title, author, publisher 전부 통합 검색이기에
@Query("SELECT b FROM Book b WHERE b.title LIKE %:title% OR b.author LIKE %:author% OR b.publisher LIKE %:publisher% order by b.isbn13 desc") List<Book> mFindAll(@Param("title") String title, @Param("author") String author, @Param("publisher") String publisher);
title, author, publiser을 각 각 넣을 예정이었지만
 
생각해보면 하나의 검색창에 같은 입력값을 받는데 굳이 3개로 나눠야 할 까 싶어
하나의 입력값으로 전부 찾는 쿼리를 생각했습니다.
@Query("SELECT b FROM Book b WHERE b.title LIKE %:searchTerm% OR b.author LIKE %:searchTerm% OR b.publisher LIKE %:searchTerm%") List<Book> mFindAll(@Param("searchTerm") String searchTerm);
 
  1. 검색 시 받을 DTO
@Data public static class BookSearchDTO { private String isbn13; private String title; private String author; private String publisher; private String cover; private String keyword; public BookSearchDTO(Book book, String bookTitle) { this.isbn13 = book.getIsbn13(); this.title = book.getTitle(); this.author = book.getAuthor(); this.publisher = book.getPublisher(); this.cover = book.getCover(); this.keyword = bookTitle; } }
 
  1. 서비스 짜기
public List<BookResponse.BookSearchDTO> 검색기록보기(String keyword){ System.out.println("검색어:" + keyword); //아무것도 적지 않았을 때 if(keyword == null){ List<Book> bookPG = bookRepository.findAll(); List<BookResponse.BookSearchDTO> dtos = new ArrayList<>(); for(Book book : bookPG){ BookResponse.BookSearchDTO dto = new BookResponse.BookSearchDTO(book, ""); dtos.add(dto); } return dtos; } List<Book> searchBookList = bookRepository.mFindAll(keyword); //만약 검색결과가 없을 때 if(searchBookList.isEmpty()){ throw new ExceptionApi404("검색 결과가 없습니다."); } //검색 결과가 있을 때 List<BookResponse.BookSearchDTO> dtos = new ArrayList<>(); for(Book book : searchBookList){ BookResponse.BookSearchDTO dto = new BookResponse.BookSearchDTO(book, keyword); dtos.add(dto); } return dtos; }
 
  1. 컨트롤러 짜기
@GetMapping("/search") public ResponseEntity<?> search(@RequestParam(name = "keyword") String keyword) { List<BookResponse.BookSearchDTO> searchDTOS = bookService.검색기록보기(keyword); return ResponseEntity.ok(Resp.ok(searchDTOS)); }
Share article

keepgoing