JavaにおけるCRUD操作
メニューを表示するにはスワイプしてください
データベースの基本操作
図書館管理の実践課題を完了し、リストへの追加、取得、削除の各要素に対するメソッドを実装しました。
これらの操作は、ほぼすべてのリストやアプリケーションにおいて基本的なものであり、CRUD操作として知られています。
CRUDは、CREATE、READ、UPDATE、DELETEの略であり、データベースに対して実行される操作を表します。
前回の課題では、クラスLibraryがデータベース、特に書籍のリストとして機能しました。このリストを操作するための基本的な操作を実装し、それぞれを少しカスタマイズしました。たとえば、著者で本を取得する、または特定の年以降に出版された本のリストを取得するなど、より特化したメソッドを作成しました。
同様の操作は、大規模なアプリケーションでもデータベースとやり取りするために利用されます。最終的に、アプリケーションは次のことができる必要があります:
- データベースにデータを作成できること;
- データベースからデータを読み取ることができること;
- データベース内の特定のデータを更新できること;
- データベースからデータを削除できること。
前回の課題で更新メソッドを実装していなかったことに気付いたかもしれません。
これから実装してみましょう:
IDで要素を更新するには、まずIDで本を取得する必要があります。そのために、IDで本を取得するメソッドを実装します。この方法の方が、本の更新メソッド内でIDで本を取得するロジックを実装するよりも良いです。このメソッドは他の関数でも再利用でき、より汎用的になります。
Library.java
123456789public Book findBookById(int id) { Book result; for (Book book : books) { if (book.getId() == id){ result = book; } } return result; }
上記の解決策は良い選択肢ですが、小さな問題があります。リストにそのようなIDが存在しない場合、エラーが発生します。このエラーを処理し、リスト(データベース)にそのような本が存在しないことを画面に表示するメッセージを出す必要があります。
Library.java
123456789101112public Book findBookById(int id) { Book result = null; for (Book book : books) { if (book.getId() == id){ result = book; } } if (result == null) { result = new Book("Unknown", "Unknown", 0); } return result; }
この解決策では、最初に変数 result を null で初期化します。IDによる書籍検索を実装した後、result がまだ null かどうかを確認します。もし true であれば、新しい未定義の書籍を作成します。
次に、update メソッドの実装に進みます。
Library.java
123456789101112public void updateBookById(int id, Book newBook) { Book bookToBeUpdated = findBookById(id); for (Book book : books) { if (book.getId().equals(bookToBeUpdated.getId())) { book.setId(newBook.getId()); book.setAuthor(newBook.getAuthor()); book.setTitle(newBook.getTitle()); book.setYear(newBook.getYear()); return; // Ending loop execution, because update operation has executed successfully } } }
すべてのパラメータを更新することで書籍を更新しました。 この方法を強く推奨します。なぜなら、単純に書籍を再代入すると予期しないエラーが発生する可能性があるからです。 この方法では、ID で書籍を更新し、新しい書籍のパラメータに再代入します。
それでは、update メソッドを使って何が起こるか見てみましょう。
Main.java
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148package com.example; import java.util.ArrayList; import java.util.List; class Main { public static void main(String[] args) { Library library = new Library(); library.addBook(new Book("Java: The Complete Reference", "Herbert Schildt", 2019)); library.addBook(new Book("Effective Java", "Joshua Bloch", 2020)); library.addBook(new Book("Clean Code", "Robert C. Martin", 2008)); System.out.println("All books in the library:"); library.displayAllBooks(); Book newBook = new Book("Head First Java", "Katy Siera", 2022); library.updateBookById(2, newBook); System.out.println("\nAll books after using update method"); library.displayAllBooks(); } } class Book { private static Long nextId = 1L; private String title; private String author; private int year; private Long id; public Book(String title, String author, int year) { this.title = title; this.author = author; this.year = year; this.id = nextId++; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public int getYear() { return year; } public void setYear(int year) { this.year = year; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } @Override public String toString() { return "Book{" + "title='" + title + '\'' + ", author='" + author + '\'' + ", year=" + year + ", id=" + id + '}'; } } class Library { public List<Book> books = new ArrayList<>(); public void addBook(Book book) { books.add(book); } public void removeBookById(int id) { List<Book> booksToRemove = new ArrayList<>(); for (Book book : books) { if (book.getId() == id) { booksToRemove.add(book); } } books.removeAll(booksToRemove); } public List<Book> findBooksByAuthor(String author) { List<Book> booksWithSpecifiedAuthor = new ArrayList<>(); for (Book book : books) { if (book.getAuthor().equals(author)) { booksWithSpecifiedAuthor.add(book); } } return booksWithSpecifiedAuthor; } public List<Book> findBooksPublishedAfterYear(int year) { List<Book> booksPublishedAfterYear = new ArrayList<>(); for (Book book : books) { if (book.getYear() > year){ booksPublishedAfterYear.add(book); } } return booksPublishedAfterYear; } public Book findBookById(int id) { Book result = null; for (Book book : books) { if (book.getId() == id){ result = book; } } if (result == null) { result = new Book("Unknown", "Unknown", 0); } return result; } public void updateBookById(int id, Book newBook) { Book bookToBeUpdated = findBookById(id); for (Book book : books) { if (book.getId().equals(bookToBeUpdated.getId())) { book.setId(newBook.getId()); book.setAuthor(newBook.getAuthor()); book.setTitle(newBook.getTitle()); book.setYear(newBook.getYear()); return; // Ending loop execution, because update operation has executed successfully } } } public void displayAllBooks() { System.out.println(books); } }
これで、Library クラスにはすべての CRUD 操作が含まれています。
この章で紹介したメソッドをコピーして、前回の課題で作成したコードに追加することをおすすめします。更新されたこのコードは、今後役立ちます。
1. CRUD の略語は何を意味しますか?
2. なぜコード内でCRUD操作を実装する必要があるのか?
3. CRUD操作はデータベースで使用できるか?
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください