본문 바로가기
💻 뚝딱뚝딱/팀내도서대여시스템(OBRS)

[개발일지#013] 데이터베이스 컬럼추가 및 화면 수정

by 뚜루리 2024. 6. 27.
728x90
320x100

 

 

카카오 도서 검색 API를 사용하려고보니 ISBN 나 썸네일 이미지 등 가져올 수 있는 정보가 생각보다 디테일하고 많아서,

조금 더 풍부한 형태로 조회/등록/수정이 가능할 것 같아 이것저것 수정하게 되었다. 

 


 

1. 일단 개발 편의성을 위해 다른 사이드에 적용했던 Xml에서 카멜 표기법을 적용해두었고

 

[Spring boot(스프링부트)/Mybatis] Xml에 카멜표기법 설정하기

Mybatis를 사용하여 xml을 사용할 때 예를들어 데이터베이스의 MEMBER_ID 컬럼이고 Java의 Dto 변수명이 memberd일 경우, 자동으로 카멜변환을 해주지 못해서 급한대로 아래처럼 alias를 따로 줬었음. 그리

ddururiiiiiii.tistory.com

 

 


 

2. 또다른 개발 편의성을 위해 log4jdbc를 이용해 콘솔창에 쿼리문이랑 결과값이 테이블 형태로 뜨게끔 적용해두었다. 

 

[스프링부트(Spring boot)/Log4jdbc] 콘솔창에 쿼리문 + 테이블형태 결과값 로그 남기기

오늘은 아래와 같이 콘솔창에 쿼리문이랑 결과값이 테이블 형태로 예쁘게(?) 찍히는 걸 해보겠음.  [참고]스프링부트에서는 자체적으로 Log관련들을 제공하고 application.properties를 수정하면 로그

ddururiiiiiii.tistory.com

 

 

 


 

3. BOOK 테이블의 컬럼추가

카카오 도서 검색 API를 통해 얻은 정보를 BOOK 테이블에 몇 가지 추가저장해야 할 것 같아서 테이블에 컬럼을 (ISBN, PUBLISHER< THUMBNAIL_IMG) 3가지 추가하였고, BOOK객체도 수정하였다. 

 

4-1. BOOK 객체 수정

Book.java

package seulgi.bookRentalSystem.domain.book;


import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter;

@Getter @Setter
@RequiredArgsConstructor
public class Book {

    private String bookId;
    private String bookName;
    private String bookWriter;
    private String authorId;
    private String authorName;
    private String isbn;
    private String publisher;
    private String thumbnailImg;
    private String bookRentalId;
    private String bookStateCode;
    private String bookStateCodeName;
    private String createDate;

}

 

 

4-2. EditForm 객체 수정

package seulgi.bookRentalSystem.domain.book;

import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter;

@Getter
@Setter
@RequiredArgsConstructor
public class EditForm {

    private String bookName;
    private String bookWriter;
    private String isbn;
    private String publisher;
    private String thumbnailImg;
    private String bookStateCode;
}

 

 

 

5. 관련쿼리 수정

bookMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="seulgi.bookRentalSystem.domain.book.BookMapper">
 <!-- 생략 -->
    <select id="findByBookId" parameterType="String"
            resultType="seulgi.bookRentalSystem.domain.book.Book">
        SELECT
               BOOK_ID
             , BOOK_NAME
             , BOOK_WRITER
             , ISBN
             , PUBLISHER
             , THUMBNAIL_IMG
             , AUTHOR_ID
             , (SELECT MEMBER_NAME
                FROM MEMBER_TB
                WHERE MEMBER_ID = AUTHOR_ID ) AS AUTHOR_NAME
             , BOOK_STATE_CODE
             , (SELECT STATE_CODE_NAME
                FROM BOOK_STATE_CODE
                WHERE STATE_CODE = BOOK_STATE_CODE) AS  BOOK_STATE_CODE_NAME
             , CREATE_DATE
        FROM BOOK
        WHERE BOOK_ID = #{bookId}
          AND USE_AT = 'Y'
        ORDER BY createDate DESC
    </select>

    <select id="allBookList" resultType="seulgi.bookRentalSystem.domain.book.Book">
        SELECT
               BOOK_ID
             , BOOK_NAME
             , BOOK_WRITER
             , ISBN
             , PUBLISHER
             , THUMBNAIL_IMG
             , AUTHOR_ID
             , (SELECT MEMBER_NAME
                FROM MEMBER_TB
                WHERE MEMBER_ID = AUTHOR_ID ) AS AUTHOR_NAME
             , BOOK_STATE_CODE
             , (SELECT STATE_CODE_NAME
                FROM BOOK_STATE_CODE
                WHERE STATE_CODE = BOOK_STATE_CODE) AS BOOK_STATE_CODE_NAME
             , CREATE_DATE
        FROM BOOK
        WHERE USE_AT = 'Y'
        ORDER BY createDate DESC
        LIMIT #{offset}, #{limit}
    </select>

    <select id="countBooks" resultType="int">
        SELECT COUNT(*)
        FROM BOOK
        WHERE USE_AT = 'Y'
    </select>

    <insert id="addBook" parameterType="seulgi.bookRentalSystem.domain.book.Book">
        INSERT INTO BOOK
                    ( BOOK_ID
                    , BOOK_NAME
                    , BOOK_WRITER
                    , AUTHOR_ID
                    , ISBN
                    , PUBLISHER
                    , THUMBNAIL_IMG
                    , BOOK_STATE_CODE
                    , CREATE_DATE
                    , USE_AT
        ) VALUES (   #{book.bookId}
                   , #{book.bookName}
                   , #{book.bookWriter}
                   , #{book.isbn}
                   , #{book.publisher}
                   , #{book.thumbnailImg}
                   , #{book.authorId}
                   , #{book.bookStateCode}
                   , now()
                   , 'Y'
                   )
    </insert>

    <update id="editBook" parameterType="java.util.Map">
        UPDATE BOOK
        SET BOOK_NAME       = #{book.bookName}
          , BOOK_WRITER     = #{book.bookWriter}
          , ISBN            = #{book.isbn}
          , PUBLISHER       = #{book.publisher}
          , THUMBNAIL_IMG   = #{book.thumbnailImg}
          , BOOK_STATE_CODE = #{book.bookStateCode}
        WHERE BOOK_ID = #{bookId}
          AND USE_AT = 'Y'
    </update>

    <select id="findByAuthorId" resultType="seulgi.bookRentalSystem.domain.book.Book">
        SELECT
               BOOK_ID
             , BOOK_NAME
             , BOOK_WRITER
             , ISBN
             , PUBLISHER
             , THUMBNAIL_IMG
             , AUTHOR_ID
             , (SELECT MEMBER_NAME
                FROM MEMBER_TB
                WHERE MEMBER_ID = AUTHOR_ID ) AS AUTHOR_NAME
             , BOOK_STATE_CODE
             , (SELECT STATE_CODE_NAME
                FROM BOOK_STATE_CODE
                WHERE STATE_CODE = BOOK_STATE_CODE) AS BOOK_STATE_CODE_NAME
             , CREATE_DATE
        FROM BOOK
        WHERE AUTHOR_ID = #{authorId}
          AND USE_AT = 'Y'
        ORDER BY createDate DESC
        LIMIT #{offset}, #{limit}
    </select>
 <!-- 생략 -->

</mapper>

 

 

6. 책 전체조회 화면 수정

  • 책 전제조회시 출판사와 썸네일 이미지도 작게 보일수 있도록 화면을 수정했다. 

 

 

7. 책 단건조회 화면 수정

  • 책 단건 조회시에도 출판사가 보이게끔 변경했다.

 

 

 

 

8. 책 단건수정 화면 수정

  • 책 단건 수정하는 화면도 한번 등록하면 책정보는 수정할 수 없고 책 상태만 변경하도록 변경했다.

 

 

9. 책 등록화면 수정

책 등록화면은 거의 전면 수정했음. 직접입력하지 않고 도서검색 API를 사용할 거기 때문에 도서 검색 버튼을 만들어 버튼 클릭시 팝업창에서 도서 검색이 가능하게끔 만들 예정이고 그래서 화면을 이렇게 바꿈. 

728x90
320x100