나의개발일지

도서등록 본문

프로젝트/전자도서관 프로젝트

도서등록

아. 이렇게 하면 될거 같은데.. 2024. 1. 7. 20:50
728x90


관리자로 부터 도서이름, 저자, 출판사, 출판일, isbn, call-number, 대출여부, 이미지를 받아서 DB에 저장한다.


<도서등록 페이지>

 

<DB에 들어온 모습>


도서 등록 구현

 

1. JSP페이지

JSP 페이지에서 b_name, b_author, b_publisher, b_publish_year, b_isbn, b_call_number, b_rantal_able, file 을 받아서 post 방식으로 전송한다. 이때 /book/admin/registerBookConfirm신호를 Controller에게 보낸다.

<form action="<c:url value='/book/admin/registerBookConfirm' />" name="register_book_form" method="post" enctype="multipart/form-data">

    <input type="text"		name="b_name" 			placeholder="INPUT BOOK NAME."> <br>
    <input type="text"		name="b_author" 		placeholder="INPUT BOOK AUTHOR."> <br>
    <input type="text"		name="b_publisher"		placeholder="INPUT BOOK PUBLISHER."> <br>
    <input type="text"		name="b_publish_year" 	placeholder="INPUT BOOK PUBLISH YEAR."> <br>
    <input type="text"		name="b_isbn" 			placeholder="INPUT BOOK ISBN."> <br>
    <input type="text"		name="b_call_number" 	placeholder="INPUT BOOK CALL NUMBER."> <br>
    <select name="b_rantal_able">
        <option value="">SELECT BOOK RANTAL ABLE.</option>
        <option value="0">UNABLE.</option>
        <option value="1">ABLE.</option>
    </select><br>
    <input type="file"		name="file"><br>
    <input type="button"	value="register book" onclick="registerBookForm();"> 
    <input type="reset"		value="reset">

</form>

 

2. Vo 객체

Vo객체란 Value Object를 뜻하며 데이터를 담는 객체이다. 주로 데이터의 전달하거나 받는데 사용한다 (Getter, Setter) 이 코드에서는 롬복(lombok)을 이용해서 코드를 단순화 하였다.

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter

public class BookVo {
	int 	b_no;
	String	b_thumbnail;
	String	b_name;
	String	b_author;
	String	b_publisher;
	String	b_publish_year;
	String	b_isbn;
	String	b_call_number;
	int		b_rantal_able;
	String	b_reg_date;
	String	b_mod_date;
	

}

 

3. Controller

  • JSP에서 전달받은 파라미터 "file"을 이용하여 uploadFileService의 upload메서드를 실행한다.
  • 저장결과를 바탕으로 저장에 성공하였으면 bookService의 registerBookConfirm메서드를 실행한다.
  • 메서드 실행 결과에 따라 register_book_ng, register_book_ok 중 하나의 페이지를 리턴한다.
//도서 등록 처리
@PostMapping("/registerBookConfirm")
public String registerBookConfirm(BookVo bookVo,
        @RequestParam("file") MultipartFile file) {

    String nextPage = "admin/book/register_book_ok";

    //파일 저장
    String saveFileName = uploadFileService.upload(file);

    if (saveFileName != null) {
        //파일 저장 ok
        bookVo.setB_thumbnail(saveFileName);
        int result = bookService.registerBookConfirm(bookVo);

        if (result <= 0) {
            nextPage = "admin/book/register_book_ng";
        }

    } else {
        nextPage = "admin/book/register_book_ng";
    }

    return nextPage;
}

 

4. UploadFileService

  • getOriginalFilename메서드로 파일 정보를 가져온다.
  • substring메서스로 확장명을 추출한다.
  • 파일의 유일한 식별자를 생성하여 저장한다.
import java.io.File;
import java.util.UUID;

import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

@Service
public class UploadFileService {

	public String upload(MultipartFile file) {
		boolean result = false;
		
		//업로드한 원본 파일명
		String fileOriName = file.getOriginalFilename();
		
		//파일 경로에서 확장명을 추출
		String fileExtension = fileOriName.substring(fileOriName.lastIndexOf("."),
								fileOriName.length());
		
		//파일 저장 위치
		String uploadDir = "#";
		
		//파일의 유일한 식별자 생성 (UUID)
		UUID uuid = UUID.randomUUID();
		
		String uniqueName = uuid.toString().replace("-", "");
		
		//실제 저장할 파일 객체 생성
		File saveFile = new File(uploadDir + uniqueName + fileExtension);
		
		// 파일이 저장될 디렉터리가 있는지 체크
		if (!saveFile.exists())
			saveFile.mkdir();
		
		try {
			file.transferTo(saveFile);
			result = true;
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		if (result) {
			System.out.println("FILE UPLOAD SUCCES");
			return uniqueName + fileExtension;
			
		} else {
			System.out.println("FILE UPLOAD FAIL");
			return null;
		}
		
	}

}

 

5. Service

  • 서비스에서는 Vo객체를 받아서 DB에 이 책이 있는 확인하는 로직인 bookDao.isISBN에 isbn값을 넘겨준다.
  • 중복되는 책이 없으면 DAO의 insert 매서드를 실행한다.
public int registerBookConfirm(BookVo bookVo) {

    boolean isISBN = bookDao.isISBN(bookVo.getB_isbn());

    if(!isISBN) {
        int result = bookDao.insert(bookVo);

        if (result > 0) {
            return 1;
        } else {
            return -1;
        }
    } else {
        return 0;
    }
}

 

6. DAO

  • isISBN메서드는 SELECT문을 실행하여 이 책의 중복 유무를 확인한다.
  • insert메서드는 INSERT문을 실행하여 bookVo에서 이름, 썸네일, 저자 등을 받아와서 DB에 삽입한다.
public boolean isISBN(String b_isbn) {

    String sql = "SELECT COUNT(*) FROM tb1_book WHERE b_isbn = ?";

    int result = jdbcTemplate.queryForObject(sql, Integer.class, b_isbn);

    return (result > 0) ? true : false;
}

public int insert(BookVo bookVo) {

    String sql = "INSERT INTO tb1_book (b_thumbnail, b_name, b_author, "+
                    "b_publisher, b_publish_year, b_isbn, " +
                    "b_call_number, b_rantal_able, " +
                    "b_reg_date, b_mod_date)" + 
                    "VALUES (?,?,?,?,?,?,?,?,NOW(),NOW())";

    int result = -1;

    result = jdbcTemplate.update(sql, bookVo.getB_thumbnail(),
                                      bookVo.getB_name(),
                                      bookVo.getB_author(),
                                      bookVo.getB_publisher(),
                                      bookVo.getB_publish_year(),
                                      bookVo.getB_isbn(),
                                      bookVo.getB_call_number(),
                                      bookVo.getB_rantal_able());


    return result;
}
728x90
반응형

'프로젝트 > 전자도서관 프로젝트' 카테고리의 다른 글

새 비밀번호 생성 with. e-mail  (1) 2024.01.07
계정 수정  (2) 2023.12.28
로그인, 로그아웃  (0) 2023.12.24
회원가입  (0) 2023.11.21
개발환경 세팅  (0) 2023.11.14