나의개발일지
도서등록 본문
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 |