[ 작업한 내용 ]
1. 도서 검색 기능 추가
1-1) BookSearchReqDTO, BookSearchResDTO 각각 생성
- Request용은 keyword 필드만 있다.
- Response용은 id, title, author, publisher, publishedDate, location 필드를 가지고 있다.
1-2) AdminBookController
- searchBook 메서드를 생성하고 @RequestBody로 BookSearchReqDTO request를 받는다.
- BookSearchReqDTO에는 keyword 필드만 있다.
- 블럭에 String keyword 변수를 생성하고 request.getKeyword() 로 초기화한다.
- adminBookService로 keyword를 보내어 데이터를 요청한다.
- return으로는 검색 결과된 데이터를 응답해준다.
1-3) AdminBookService
- searchBookByKeyword 메서드를 생성하고 String keyword를 받는다.
- adminBookRepository.findByTitleContainingIgnoreCaseOrAuthorContainingIgnoreCase(keyword, keyword)로 데이터를 조회하여 가져와서 List<Book> books에 저장한다.
- if문을 사용하여 books.isEmpty()이면 책을 찾을 수 없다는 예외를 던진다.
- 데이터가 있으면 .stream()을 사용하여 new BookSearchResDTO를 생성하여 service계층으로 return 해준다.
1-4) AdminBookRepository
- List<Book> findByTitleContainingIgnoreCaseOrAuthorContainingIgnoreCase(String titleKeyword, String authorKeyword); 메서드를 생성한다.
2. description 필드 수정
- Book 엔티티에서 description 필드에 @Column(columnDefinition = "TEXT") 추가.
- 이유는 서버 실행시 정상적으로 작동은 하지만 로그에 Error executing DDL "alter table book modify column description varchar(255)" via JDBC [Data truncation: Data too long for column 'description' at row 1] 이런 문구가 뜨기 때문에.
- 길이의 문제인 거 같아서 gpt에 검색해보니 DB에 description 타입을 text로 했으면 동일하게 해주는게 좋다고 한다.
[ 메모 ]
- Spring Data JPA에서 메서드 이름으로 쿼리를 자동으로 생성하는 기능을 제공한다.
- findByTitleContainingIgnoreCaseOrAuthorContainingIgnoreCase 같은 메서드 이름도 그중 하나이다.
- findBy: 조회 메서드라는 의미.
- TitleContainingIgnoreCase: title 컬럼에 keyword가 포함(Containing)되어 있고, 대소문자 구분 안 함(IgnoreCase)
- Or: 또는
- AuthorContainingIgnoreCase: author 컬럼에 keyword가 포함되어 있고 대소문자 구분 안 함.
- 즉, title에 포함되거나 author에 포함된 데이터를 찾는다는 뜻.
'개발 기록 > 도서관 관리 시스템' 카테고리의 다른 글
[Library Management System] 25.08.24 (27일) (0) | 2025.08.24 |
---|---|
[Library Management System] 25.08.20 (26일) (0) | 2025.08.20 |
[Library Management System] 25.08.09 (24일) (0) | 2025.08.10 |
[Library Management System] 25.08.08 (23일) (0) | 2025.08.08 |
[Library Management System] 25.08.07 (22일) (0) | 2025.08.07 |