diff --git a/src/main/java/com/example/demo/controller/BookController.java b/src/main/java/com/example/demo/controller/BookController.java index 2bc6f8b..dba3968 100644 --- a/src/main/java/com/example/demo/controller/BookController.java +++ b/src/main/java/com/example/demo/controller/BookController.java @@ -1,15 +1,28 @@ package com.example.demo.controller; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; + +import com.example.demo.entity.Book; +import com.example.demo.service.BookServiceImpl; + @Controller public class BookController { - @PostMapping("/book") - public String book() { - return "book"; - } - - + @Autowired + private BookServiceImpl bookService; + @GetMapping("/book") + public String book(Model model) { + + List aaa = bookService.findAll(); + + // DBから取得したデータをHTMLで扱えるようにする + model.addAttribute("book",bookService.findAll()); + return "book"; + } } diff --git a/src/main/java/com/example/demo/entity/Book.java b/src/main/java/com/example/demo/entity/Book.java new file mode 100644 index 0000000..06c6fe3 --- /dev/null +++ b/src/main/java/com/example/demo/entity/Book.java @@ -0,0 +1,91 @@ +package com.example.demo.entity; + +import java.sql.Date; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; + +import lombok.Data; + +@Entity // このクラスがDBのテーブルに対応することを表す +@Data +@Table(name = "book") +public class Book { + + //図書ID + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "book_id", nullable = false) + private int bookId; + + // 図書管理ID(BK-1など) + @Column(name = "book_manage_id", nullable = true) + private String bookManageId; + + // タイトル + @Column(name = "title", nullable = false) + private String title; + + //ISBN + @Column(name = "isbn", nullable = false) + private String isbn; + + // 著者名 + @Column(name = "author", nullable = false) + private String author; + + // 出版社 + @Column(name = "publisher", nullable = true) + private String publisher; + + // 出版日 + @Column(name = "publication_date", nullable = true) + private Date publicationDate; + + // サブカテゴリーID!! + @ManyToOne + @JoinColumn(name = "book_subcategory_id", nullable = false) + private BookSubcategory bookSubcategory; + + // 保管場所 + @ManyToOne + @JoinColumn(name = "location_id", nullable = false) + private StorageLocation storageLocation; + + + // 本の状態 + @Column(name = "condition_s", nullable = false) + private int condition; + + // 登録日 + @Column(name = "created_at", nullable = false) + private Date createdAt; + + // 更新日 + @Column(name = "updated_at", nullable = false) + private Date updatedAt; + + //削除フラグ + @Column(name = "is_deleted", nullable = false) + private Integer isDeleted; + + // 寄贈者社員ID?? + @ManyToOne + @JoinColumn(name = "donor_id", nullable = false) + private Employee employee; + + //備考 + @Column(name = "description", nullable = true) + private String description; + + //申請承認フラグ + @Column(name = "book_approval", nullable = false) + private Integer bookApproval; + +} 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/entity/BookCategory.java b/src/main/java/com/example/demo/entity/BookCategory.java new file mode 100644 index 0000000..de7633d --- /dev/null +++ b/src/main/java/com/example/demo/entity/BookCategory.java @@ -0,0 +1,28 @@ +package com.example.demo.entity; + +import java.util.ArrayList; +import java.util.List; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; + +import lombok.Data; + +@Entity +@Data +@Table(name="book_category") +public class BookCategory { + + @Id + @Column(name = "book_category_id") + private Integer bookCategoryId; + + @Column(name = "book_category_name") + private String bookCategoryName; + + @OneToMany(mappedBy = "bookCategory") + private List BookSubcategories = new ArrayList<>(); +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/entity/BookLend.java b/src/main/java/com/example/demo/entity/BookLend.java new file mode 100644 index 0000000..c4071b8 --- /dev/null +++ b/src/main/java/com/example/demo/entity/BookLend.java @@ -0,0 +1,43 @@ +package com.example.demo.entity; + +import java.sql.Date; + +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; + +@Entity // このクラスがDBのテーブルに対応することを表す +@Data +@Table(name = "book_lend") +public class BookLend { + //貸出ID + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "lend_Id", nullable = false) + private int lendId; + + // 図書管理ID(BK-1など) + @Column(name = "book_manage_id", nullable = false) + private String bookManageId; + + // 図書管理ID(BK-1など) + @Column(name = "employee_id", nullable = false) + private Integer employeeId; + + // 貸出日 + @Column(name = "book_lend_date", nullable = false) + private Date bookLendDate; + + // 返却日 + @Column(name = "book_return_date", nullable = false) + private Date bookReturnDate; + + // 貸出状態 + @Column(name = "book_status", nullable = false) + private Integer bookStatus; +} diff --git a/src/main/java/com/example/demo/entity/BookSubcategory.java b/src/main/java/com/example/demo/entity/BookSubcategory.java new file mode 100644 index 0000000..63e1581 --- /dev/null +++ b/src/main/java/com/example/demo/entity/BookSubcategory.java @@ -0,0 +1,34 @@ +package com.example.demo.entity; + +import java.util.ArrayList; +import java.util.List; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; + +import lombok.Data; + +@Entity +@Data +@Table(name = "book_subcategory") +public class BookSubcategory { + @Id + @Column(name = "book_subcategory_id") + private Integer bookSubcategoryId; + + @ManyToOne + @JoinColumn(name = "book_category_id", nullable = false) + private BookCategory bookCategory; + + @Column(name = "book_subcategory_name") + private String bookSubcategoryName; + + @OneToMany(mappedBy = "bookSubcategory") + private List Books = new ArrayList<>(); + +} diff --git a/src/main/java/com/example/demo/entity/Employee.java b/src/main/java/com/example/demo/entity/Employee.java new file mode 100644 index 0000000..f5a3fda --- /dev/null +++ b/src/main/java/com/example/demo/entity/Employee.java @@ -0,0 +1,37 @@ +package com.example.demo.entity; + +import java.util.ArrayList; +import java.util.List; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; + +import lombok.Data; + +@Entity // このクラスがDBのテーブルに対応することを表す +@Data +@Table(name = "employee") +public class Employee { + //社員ID + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "employee_Id", nullable = false) + private int employeeId; + + // 社員名 + @Column(name = "employee_name", nullable = false) + private String employeeName; + + //部署ID + @Column(name = "department_id", nullable = false) + private Integer departmentId; + + @OneToMany(mappedBy = "employee") + private List employees = new ArrayList<>(); + +} diff --git a/src/main/java/com/example/demo/entity/StorageLocation.java b/src/main/java/com/example/demo/entity/StorageLocation.java new file mode 100644 index 0000000..b12c5a4 --- /dev/null +++ b/src/main/java/com/example/demo/entity/StorageLocation.java @@ -0,0 +1,34 @@ +package com.example.demo.entity; + +import java.util.ArrayList; +import java.util.List; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; + +import lombok.Data; + +@Entity // このクラスがDBのテーブルに対応することを表す +@Data +@Table(name = "storage_location") +public class StorageLocation { + //保管場所ID + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "location_id", nullable = false) + private int locationId; + + // 保管場所名 + @Column(name = "location_name", nullable = false) + private String locationName; + + @OneToMany(mappedBy = "storageLocation") + private List Location = new ArrayList<>(); + + +} 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/form/BookForm.java b/src/main/java/com/example/demo/form/BookForm.java new file mode 100644 index 0000000..bb2ecf0 --- /dev/null +++ b/src/main/java/com/example/demo/form/BookForm.java @@ -0,0 +1,5 @@ +package com.example.demo.form; + +public class BookForm { + +} 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/repository/BookCategoryRepository.java b/src/main/java/com/example/demo/repository/BookCategoryRepository.java new file mode 100644 index 0000000..6b8a095 --- /dev/null +++ b/src/main/java/com/example/demo/repository/BookCategoryRepository.java @@ -0,0 +1,10 @@ +package com.example.demo.repository; + +import org.springframework.data.jpa.repository.JpaRepository; + +import com.example.demo.entity.BookCategory; + +public interface BookCategoryRepository + extends JpaRepository { + +} \ No newline at end of file diff --git a/src/main/java/com/example/demo/repository/BookRepository.java b/src/main/java/com/example/demo/repository/BookRepository.java new file mode 100644 index 0000000..f8d5774 --- /dev/null +++ b/src/main/java/com/example/demo/repository/BookRepository.java @@ -0,0 +1,10 @@ +package com.example.demo.repository; + + +import org.springframework.data.jpa.repository.JpaRepository; + +import com.example.demo.entity.Book; + +public interface BookRepository 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/java/com/example/demo/service/BookService.java b/src/main/java/com/example/demo/service/BookService.java new file mode 100644 index 0000000..6d92083 --- /dev/null +++ b/src/main/java/com/example/demo/service/BookService.java @@ -0,0 +1,11 @@ +package com.example.demo.service; + +import java.util.List; + +import com.example.demo.entity.Book; + +public interface BookService { + String booklist(Book book); + + List findAll(); +} diff --git a/src/main/java/com/example/demo/service/BookServiceImpl.java b/src/main/java/com/example/demo/service/BookServiceImpl.java new file mode 100644 index 0000000..c12e07d --- /dev/null +++ b/src/main/java/com/example/demo/service/BookServiceImpl.java @@ -0,0 +1,35 @@ +package com.example.demo.service; + + +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import com.example.demo.entity.Book; +import com.example.demo.repository.BookRepository; + +@Service +public class BookServiceImpl{ + + @Autowired + private BookRepository bookRepository; + +// @Override +// public String booklist(com.example.demo.entity.Book book) { +// Book booklist = new Book(); +// booklist.setBookId(book.getBookId()); +// +// return null; +// } + + + + public List findAll() { + return bookRepository.findAll(); + } + + + + +} 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