From 2bcece419b17b4581ad30c7f61efa5959d1a5093 Mon Sep 17 00:00:00 2001 From: w-yuki Date: Thu, 24 Sep 2026 09:41:41 +0900 Subject: [PATCH] =?UTF-8?q?[add]=E5=AF=84=E8=B4=88=E7=94=B3=E8=AB=8B?= =?UTF-8?q?=E3=83=95=E3=82=A9=E3=83=BC=E3=83=A0=E3=82=92=E8=BF=BD=E5=8A=A0?= =?UTF-8?q?=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/example/demo/entity/BookApproval.java | 80 +++ .../example/demo/form/BookApprovalForm.java | 51 ++ .../repository/BookApprovalRepository.java | 12 + .../demo/service/BookApprovalService.java | 61 ++ .../resources/templates/bookApproval.html | 634 +----------------- .../templates/bookApprovalConfirm.html | 30 +- 6 files changed, 225 insertions(+), 643 deletions(-) create mode 100644 src/main/java/com/example/demo/entity/BookApproval.java create mode 100644 src/main/java/com/example/demo/form/BookApprovalForm.java create mode 100644 src/main/java/com/example/demo/repository/BookApprovalRepository.java create mode 100644 src/main/java/com/example/demo/service/BookApprovalService.java diff --git a/src/main/java/com/example/demo/entity/BookApproval.java b/src/main/java/com/example/demo/entity/BookApproval.java new file mode 100644 index 0000000..6e107cf --- /dev/null +++ b/src/main/java/com/example/demo/entity/BookApproval.java @@ -0,0 +1,80 @@ +package com.example.demo.entity; + +import java.time.LocalDate; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; + +import lombok.Data; + +/* + * 【JPAエンティティ】department テーブルの「1行」を表すJavaオブジェクト。 + * JDBCではSQL結果を手動で詰め替えていたが、JPAは + * 「クラス⇔テーブル」「フィールド⇔カラム」の対応を書いておけば自動でやってくれる。 + */ + +@Data +@Entity +@Table(name = "book") // DBのテーブルに対応するエンティティであることを宣言 +public class BookApproval { // 対応テーブル名(クラス名と違うので明示) + + /* + * @Id … 主キー(エンティティに必須) + * @GeneratedValue … DB側で自動採番。IDENTITY = MySQLのAUTO_INCREMENTを使う + * @Column(name) … カラム名。フィールド名と違うので明示 + */ + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "book_id") + private Integer bookId; + + @Column(name = "book_manage_id") + private String bookManageId; + + @Column(name = "title") + private String title; + + @Column(name = "isbn") + private String isbn; + + @Column(name = "author") + private String author; + + @Column(name = "publisher") + private String publisher; + + @Column(name = "publication_date") + private LocalDate publicationDate; + + @Column(name = "book_subcategory_id") + private Integer bookSubcategoryId; + + @Column(name = "location_id") + private Integer locationId; + + @Column(name = "condition_s") + private Integer conditionS; + + @Column(name = "created_at") + private LocalDate createdAt; + + @Column(name = "updated_at") + private LocalDate updatedAt; + + @Column(name = "is_deleted") + private Integer isDeleted; + + @Column(name = "donor_id") + private Integer donorId; + + @Column(name = "description") + private String description; + + @Column(name = "book_approval") + private Integer bookApproval; +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/form/BookApprovalForm.java b/src/main/java/com/example/demo/form/BookApprovalForm.java new file mode 100644 index 0000000..53e1232 --- /dev/null +++ b/src/main/java/com/example/demo/form/BookApprovalForm.java @@ -0,0 +1,51 @@ +package com.example.demo.form; + +import java.time.LocalDate; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor //全フィールドを初期化するコンストラクタが生成 +@NoArgsConstructor //デフォルトコンストラクタを自動で生成 +public class BookApprovalForm { + + //社員ID + private String employeeId; + + //社員名 + private String employeeName; + + //タイトル(必須) + @NotBlank(message = "タイトルは必須です") + private String title; + + //著者名(必須) + @NotBlank(message = "著者名は必須です") + private String author; + + //本の状態(必須) + @NotBlank(message = "本の状態は必須です") + private String bookCondition; + + //出版社(任意) + private String publisher; + + //ISBN(任意) + private String isbn; + + //出版日(任意) + private LocalDate publishDate; + + //備考(任意) + //最大400文字 + @Size(max = 400, message = "備考は400文字以内で入力してください") + private String remarks; + +} + + diff --git a/src/main/java/com/example/demo/repository/BookApprovalRepository.java b/src/main/java/com/example/demo/repository/BookApprovalRepository.java new file mode 100644 index 0000000..77c4066 --- /dev/null +++ b/src/main/java/com/example/demo/repository/BookApprovalRepository.java @@ -0,0 +1,12 @@ +package com.example.demo.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import com.example.demo.entity.BookApproval; + + + @Repository + public interface BookApprovalRepository extends JpaRepository{ + } + diff --git a/src/main/java/com/example/demo/service/BookApprovalService.java b/src/main/java/com/example/demo/service/BookApprovalService.java new file mode 100644 index 0000000..7ef08c1 --- /dev/null +++ b/src/main/java/com/example/demo/service/BookApprovalService.java @@ -0,0 +1,61 @@ +package com.example.demo.service; + +import java.time.LocalDate; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.example.demo.entity.BookApproval; +import com.example.demo.form.BookApprovalForm; +import com.example.demo.repository.BookApprovalRepository; + +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class BookApprovalService { + + private final BookApprovalRepository bookApprovalRepository; + + /* + * 【登録(regist)】 + * @Transactional … このメソッドを1トランザクションで実行。途中で例外が出れば全ロールバック。 + * + * Controllerから来る employee.department は new して departmentId だけ入れた「仮」オブジェクト。 + * JPAから見ると管理下にない(detached)状態なので、そのまま保存すると + * 部署まで新規INSERTしようとするなど事故のもと。 + * → findById で「管理下(managed)の本物のDepartment」を取り直し、紐付けてから save する。 + * + * save():主キー(employeeId)がnullなのでINSERTになり、AUTO_INCREMENTのIDが採番される。 + */ + +@Transactional + public void regist(BookApprovalForm bookApprovalForm) { + + BookApproval entity = new BookApproval(); + + //必須こうもく + entity.setTitle(bookApprovalForm.getTitle()); + entity.setAuthor(bookApprovalForm.getAuthor()); + + //任意 + entity.setPublisher(bookApprovalForm.getPublisher()); + entity.setIsbn(bookApprovalForm.getIsbn()); + entity.setPublicationDate(bookApprovalForm.getPublishDate()); + entity.setDescription(bookApprovalForm.getRemarks()); + + //本の状態 + entity.setConditionS(Integer.parseInt(bookApprovalForm.getBookCondition())); + + //寄贈者 + entity.setDonorId(Integer.parseInt(bookApprovalForm.getEmployeeId())); + + + + //登録日時 + entity.setCreatedAt(LocalDate.now()); + entity.setUpdatedAt(LocalDate.now()); + + bookApprovalRepository.save(entity); + } + } diff --git a/src/main/resources/templates/bookApproval.html b/src/main/resources/templates/bookApproval.html index bfaba5f..9c93708 100644 --- a/src/main/resources/templates/bookApproval.html +++ b/src/main/resources/templates/bookApproval.html @@ -7,638 +7,8 @@ 寄贈申請フォーム - - - + + diff --git a/src/main/resources/templates/bookApprovalConfirm.html b/src/main/resources/templates/bookApprovalConfirm.html index 0ef1357..e00b29a 100644 --- a/src/main/resources/templates/bookApprovalConfirm.html +++ b/src/main/resources/templates/bookApprovalConfirm.html @@ -821,21 +821,19 @@ textarea {
- + + type="button" + class="btn btn-primary" + onclick="CompleteModal()">申請送信
@@ -852,5 +850,15 @@ textarea { + + + \ No newline at end of file