728x90
320x100
회원에 한해 내가 등록한 책 리스트와 내가 빌린 책 리스트를 확인할 수 있는 화면을 생성한다.
[개발목표]
- 나의 책 / 빌린 책 화면 구현
1. 나의 책 / 빌린 책 화면 구현
BookMapper.xml
<select id="findByAuthorId" parameterType="String"
resultType="seulgi.bookRentalSystem.domain.book.Book">
SELECT
BOOK_ID AS bookId
, BOOK_NAME AS bookName
, BOOK_WRITER AS bookWriter
, AUTHOR_ID AS authorId
, (SELECT MEMBER_NAME
FROM MEMBER_TB
WHERE MEMBER_ID = AUTHOR_ID ) AS authorName
, BOOK_STATE_CODE AS bookStateCode
, (SELECT STATE_CODE_NAME
FROM BOOK_STATE_CODE
WHERE STATE_CODE = BOOK_STATE_CODE) AS bookStateCodeName
, CREATE_DATE AS createDate
FROM BOOK
WHERE AUTHOR_ID = #{authorId}
AND USE_AT = 'Y'
ORDER BY createDate DESC;
</select>
<select id="findByBookRentalId" parameterType="String"
resultType="seulgi.bookRentalSystem.domain.book.BookRental">
SELECT
BOOK_ID AS bookId
, (SELECT BOOK_NAME
FROM BOOK T2
WHERE T1.BOOK_ID = T2.BOOK_ID) AS bookName
, BOOK_RENTAL_ID AS bookRentalId
, (SELECT MEMBER_NAME
FROM MEMBER_TB
WHERE MEMBER_ID = BOOK_RENTAL_ID ) AS rentalName
, BOOK_STATE_CODE AS bookStateCode
, (SELECT STATE_CODE_NAME
FROM RENTAL_STATE_CODE
WHERE STATE_CODE = BOOK_STATE_CODE) AS bookStateCodeName
, RENTAL_DATE AS rentalDate
, RETURN_DATE AS returnDate
FROM BOOK_RENTAL T1
WHERE BOOK_RENTAL_ID =#{bookRentalId}
ORDER BY RENTAL_DATE DESC;
</select>
- 서브쿼리를 사용하여 외래키로 연결된 데이터를 모두 조회하도록 했다.
bookMapper.java
List<Book> findByAuthorId(@Param("authorId") String authorId);
List<BookRental> findByBookRentalId(@Param("bookRentalId") String bookRentalId);
bookService, bookServiceImpl.java
public List<Book> findByAuthorId(String authorId);
public List<BookRental> findByBookRentalId(String bookRentalId);
@Override
public List<Book> findByAuthorId(String authorId) {
return bookMapper.findByAuthorId(authorId);
}
@Override
public List<BookRental> findByBookRentalId(String bookRentalId) {
return bookMapper.findByBookRentalId(bookRentalId);
}
bookController.java
/**
* 나의책 목록 조회
* @param authorId
* @param model
* @return
*/
@GetMapping("/{authorId}/booksByAuthorId")
public String booksByAuthorId(@PathVariable String authorId, Model model){
List<Book> books = bookService.findByAuthorId(authorId);
model.addAttribute("books", books);
return "book/booksByAuthorId";
}
/**
* 빌린책 목록 조회
* @param bookRentalId
* @param model
* @return
*/
@GetMapping("/{bookRentalId}/booksByBookRentalId")
public String booksByBookRentalId(@PathVariable String bookRentalId, Model model){
List<BookRental> rentalBooks = bookService.findByBookRentalId(bookRentalId);
List<BookStateCode> bookStateCodes = bookService.allRentalStateCodeList();
model.addAttribute("bookStateCodes", bookStateCodes);
model.addAttribute("rentalBooks", rentalBooks);
return "book/booksByBookRentalId";
}
booksByAuthorId.html
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
layout:decorate="~{common/layout}"
layout:fragment="content">
<head>
<title>나의 책</title>
</head>
<body>
<div class="container" style="max-width: 800px">
<div class="py-5 text-center">
<h2>나의 책</h2> </div>
<div class="row">
<div class="col">
<button class="btn btn-primary float-end" type="button" onclick="location.href='/book/addBook'"> 책 등록</button> </div>
</div>
<hr class="my-4">
<div>
<table class="table">
<thead>
<tr style="text-align: center;">
<th>No</th>
<th>책이름</th>
<th>저자</th>
<th>소유자</th>
<th>상태</th>
<th>등록일</th>
</tr>
</thead>
<tbody>
<tr th:each="book, stat : ${books}">
<td><a th:text="${stat.count}" style="text-align: center;">1</a></td>
<td><a href="book.html" th:href="@{/book/{bookId} (bookId=${book.bookId})}" th:text="${book.bookName}">책 이름</a></td>
<td><a th:text="${book.bookWriter}">저자</a></td>
<td style="text-align: center;"><a th:text="${book.authorName}">소유자</a></td>
<td style="text-align: center;">
<a th:if="${book.bookStateCode == 'ABLE'}" th:text="${book.bookStateCodeName}" style="color: darkgreen;">상태</a>
<a th:if="${book.bookStateCode == 'UNABLE'}" th:text="${book.bookStateCodeName}" style="color: red;">상태</a>
</td>
<td style="text-align: center;"><a th:text="${book.createDate}">등록일</a></td>
</tr>
</tbody>
</table>
</div>
<hr class="my-4">
</div> <!-- /container -->
</body>
</html>
booksByBookRentalId.html
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
layout:decorate="~{common/layout}"
layout:fragment="content">
<head>
<title>빌린 책</title>
</head>
<body>
<div class="container" style="max-width: 800px">
<div class="py-5 text-center">
<h2>빌린 책</h2> </div>
<hr class="my-4">
<div>
<table class="table">
<thead>
<tr style="text-align: center;">
<th>No</th>
<th>책이름</th>
<th>상태</th>
<th>대여일</th>
<th>반납일</th>
<th></th>
</tr>
</thead>
<tbody>
<tr th:each="rentalBook, stat : ${rentalBooks}">
<td><a th:text="${stat.count}" style="text-align: center;">1</a></td>
<td><a href="book.html" th:href="@{/book/{bookId} (bookId=${rentalBook.bookId})}" th:text="${rentalBook.bookName}">책 이름</a></td>
<td style="text-align: center;">
<a th:if="${rentalBook.bookStateCode == 'RENTAL'}" th:text="${rentalBook.bookStateCodeName}" style="color:red;">상태</a>
<a th:if="${rentalBook.bookStateCode == 'RETURN'}" th:text="${rentalBook.bookStateCodeName}" style="color:darkgreen;">상태</a>
</td>
<td style="text-align: center;"><a th:text="${rentalBook.rentalDate}">대여일</a></td>
<td style="text-align: center;"><a th:text="${rentalBook.returnDate}">반납일</a></td>
</tr>
</tbody>
</table>
</div>
<hr class="my-4">
</div> <!-- /container -->
</body>
</html>
728x90
320x100
'💻 뚝딱뚝딱 > 팀내도서대여시스템(OBRS)' 카테고리의 다른 글
[개발일지#010] 페이지네이션 적용하기 (회원목록 / 나의책 / 빌린책 / 모든책) (0) | 2024.04.11 |
---|---|
[개발일지#009] 로그인 / 로그아웃 / 회원가입 수정 및 구현 (0) | 2024.04.10 |
[개발일지#007] 책 수정 / 삭제 기능 수정 및 구현 (2) | 2024.04.08 |
[개발일지#006] 책 대여 / 반납 기능 구현 (0) | 2024.04.07 |
[개발일지#005] 데이터베이스 수정작업 그리고 그에 따른 XML 수정 (0) | 2024.04.06 |