CRUD-operaatiot Javassa
Tietokannan perustoiminnot
Olet suorittanut käytännön tehtävän kirjaston hallinnasta, jossa toteutit menetelmiä elementtien lisäämiseksi, hakemiseksi ja poistamiseksi listasta.
Nämä toiminnot ovat keskeisiä lähes kaikissa listoissa ja sovelluksissa—niitä kutsutaan nimellä CRUD-toiminnot!
CRUD tarkoittaa CREATE (luo), READ (lue), UPDATE (päivitä) ja DELETE (poista), ja ne kuvaavat tietokannassa suoritettavia operaatioita.
Edellisessä tehtävässä luokka Library toimi tietokantana, tarkemmin sanottuna kirjalistana. Kirjoitit perustoiminnot tämän listan käsittelyyn ja muokkasit kutakin hieman. Loit tarkempia menetelmiä esimerkiksi kirjan hakemiseen kirjailijan perusteella tai kirjojen listaamiseen tietyn vuoden jälkeen julkaistuista teoksista.
Samanlaisia toimintoja käytetään suurissa sovelluksissa tietokantojen kanssa työskentelyyn. Lopulta sovelluksen tulisi:
- Pystyä luomaan tietoja tietokantaan;
- Pystyä lukemaan tietoja tietokannasta;
- Pystyä päivittämään tiettyjä tietoja tietokannassa;
- Pystyä poistamaan tietoja tietokannasta.
Olet ehkä huomannut, ettet toteuttanut päivitysmenetelmää edellisessä tehtävässä.
Tehdään se nyt:
Ensin täytyy hakea kirja tunnisteen perusteella, jotta elementti voidaan päivittää tunnisteen avulla. Tätä varten toteutat menetelmän, joka hakee kirjan tunnisteen perusteella. Tämä tapa on parempi kuin toteuttaa kirjan hakulogiikka päivitysmenetelmän sisällä, sillä voit käyttää tätä menetelmää uudelleen muissa toiminnoissa, mikä tekee siitä monipuolisemman.
Library.java
123456789public Book findBookById(int id) { Book result; for (Book book : books) { if (book.getId() == id){ result = book; } } return result; }
Yllä oleva ratkaisu on hyvä vaihtoehto, mutta siinä on pieni ongelma. Saat virheilmoituksen, jos kyseistä ID:tä ei löydy listastamme. Tämä virhe täytyy käsitellä ja näyttää näytöllä viesti, joka ilmoittaa, ettei kyseistä kirjaa ole listassa (tietokannassa).
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; }
Aluksi alustamme muuttujan result arvolla null tässä ratkaisussa. Toteutettuamme kirjan haun tunnuksen perusteella tarkistamme, onko tuloksemme edelleen null. Jos se on true, luomme uuden määrittelemättömän kirjan.
Seuraavaksi siirrytään update-menetelmän toteutukseen:
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 } } }
Päivitimme kirjan päivittämällä kaikki sen parametrit. Suosittelen vahvasti tekemään näin, koska jos vain uudelleenosoitamme kirjan, voi syntyä odottamattomia virheitä. Tällä tavalla päivitämme kirjan ID:n perusteella, asettamalla sen uuden kirjan parametreihin.
Nyt käytetään update-menetelmää ja katsotaan, mitä tapahtuu:
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); } }
Nyt Library-luokassa on kaikki CRUD-operaatiot.
Suosittelen kopioimaan tässä luvussa esitetyt metodit ja lisäämään ne aiemman tehtävän koodiisi, sillä tämä päivitetty koodi tulee olemaan hyödyllinen myöhemmin.
1. Mitä lyhenne CRUD tarkoittaa?
2. Miksi CRUD-toimintojen toteuttaminen koodissa on tarpeellista?
3. Voidaanko CRUD-toimintoja käyttää tietokantojen kanssa?
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Mahtavaa!
Completion arvosana parantunut arvoon 4
CRUD-operaatiot Javassa
Pyyhkäise näyttääksesi valikon
Tietokannan perustoiminnot
Olet suorittanut käytännön tehtävän kirjaston hallinnasta, jossa toteutit menetelmiä elementtien lisäämiseksi, hakemiseksi ja poistamiseksi listasta.
Nämä toiminnot ovat keskeisiä lähes kaikissa listoissa ja sovelluksissa—niitä kutsutaan nimellä CRUD-toiminnot!
CRUD tarkoittaa CREATE (luo), READ (lue), UPDATE (päivitä) ja DELETE (poista), ja ne kuvaavat tietokannassa suoritettavia operaatioita.
Edellisessä tehtävässä luokka Library toimi tietokantana, tarkemmin sanottuna kirjalistana. Kirjoitit perustoiminnot tämän listan käsittelyyn ja muokkasit kutakin hieman. Loit tarkempia menetelmiä esimerkiksi kirjan hakemiseen kirjailijan perusteella tai kirjojen listaamiseen tietyn vuoden jälkeen julkaistuista teoksista.
Samanlaisia toimintoja käytetään suurissa sovelluksissa tietokantojen kanssa työskentelyyn. Lopulta sovelluksen tulisi:
- Pystyä luomaan tietoja tietokantaan;
- Pystyä lukemaan tietoja tietokannasta;
- Pystyä päivittämään tiettyjä tietoja tietokannassa;
- Pystyä poistamaan tietoja tietokannasta.
Olet ehkä huomannut, ettet toteuttanut päivitysmenetelmää edellisessä tehtävässä.
Tehdään se nyt:
Ensin täytyy hakea kirja tunnisteen perusteella, jotta elementti voidaan päivittää tunnisteen avulla. Tätä varten toteutat menetelmän, joka hakee kirjan tunnisteen perusteella. Tämä tapa on parempi kuin toteuttaa kirjan hakulogiikka päivitysmenetelmän sisällä, sillä voit käyttää tätä menetelmää uudelleen muissa toiminnoissa, mikä tekee siitä monipuolisemman.
Library.java
123456789public Book findBookById(int id) { Book result; for (Book book : books) { if (book.getId() == id){ result = book; } } return result; }
Yllä oleva ratkaisu on hyvä vaihtoehto, mutta siinä on pieni ongelma. Saat virheilmoituksen, jos kyseistä ID:tä ei löydy listastamme. Tämä virhe täytyy käsitellä ja näyttää näytöllä viesti, joka ilmoittaa, ettei kyseistä kirjaa ole listassa (tietokannassa).
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; }
Aluksi alustamme muuttujan result arvolla null tässä ratkaisussa. Toteutettuamme kirjan haun tunnuksen perusteella tarkistamme, onko tuloksemme edelleen null. Jos se on true, luomme uuden määrittelemättömän kirjan.
Seuraavaksi siirrytään update-menetelmän toteutukseen:
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 } } }
Päivitimme kirjan päivittämällä kaikki sen parametrit. Suosittelen vahvasti tekemään näin, koska jos vain uudelleenosoitamme kirjan, voi syntyä odottamattomia virheitä. Tällä tavalla päivitämme kirjan ID:n perusteella, asettamalla sen uuden kirjan parametreihin.
Nyt käytetään update-menetelmää ja katsotaan, mitä tapahtuu:
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); } }
Nyt Library-luokassa on kaikki CRUD-operaatiot.
Suosittelen kopioimaan tässä luvussa esitetyt metodit ja lisäämään ne aiemman tehtävän koodiisi, sillä tämä päivitetty koodi tulee olemaan hyödyllinen myöhemmin.
1. Mitä lyhenne CRUD tarkoittaa?
2. Miksi CRUD-toimintojen toteuttaminen koodissa on tarpeellista?
3. Voidaanko CRUD-toimintoja käyttää tietokantojen kanssa?
Kiitos palautteestasi!