Операції CRUD у Java
Основні операції для бази даних
Ви виконали практичне завдання з керування бібліотекою, реалізувавши методи для додавання, отримання та видалення елементів зі списку.
Ці операції є базовими для майже кожного списку та застосунку — вони відомі як 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 перевіряємо, чи залишився наш результат 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-операції з базами даних?
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Чудово!
Completion показник покращився до 4
Операції CRUD у Java
Свайпніть щоб показати меню
Основні операції для бази даних
Ви виконали практичне завдання з керування бібліотекою, реалізувавши методи для додавання, отримання та видалення елементів зі списку.
Ці операції є базовими для майже кожного списку та застосунку — вони відомі як 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 перевіряємо, чи залишився наш результат 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-операції з базами даних?
Дякуємо за ваш відгук!