Operazioni CRUD in Java
Operazioni di base per un database
Hai completato un esercizio pratico sulla gestione di una biblioteca, implementando metodi per aggiungere, recuperare e rimuovere elementi da una lista.
Queste operazioni sono fondamentali per quasi tutte le liste e applicazioni—sono note come operazioni CRUD!
CRUD è l'acronimo di CREATE, READ, UPDATE e DELETE, e rappresenta un insieme di operazioni da eseguire su un database.
Nel nostro caso, nell'esercizio precedente, la classe Library ha svolto il ruolo di database, in particolare la lista dei libri. Hai scritto operazioni fondamentali per lavorare con questa lista, personalizzando leggermente ciascuna di esse. Hai creato metodi più specifici per recuperare un libro tramite autore o ottenere una lista di libri pubblicati dopo un determinato anno.
Operazioni simili vengono impiegate in grandi applicazioni per interagire con i database. Alla fine, la nostra applicazione dovrebbe:
- Essere in grado di creare dati nel database;
- Essere in grado di leggere dati dal database;
- Essere in grado di aggiornare dati specifici nel database;
- Essere in grado di eliminare dati dal database.
Potresti aver notato che non hai implementato il metodo update nell'esercizio precedente.
Facciamolo ora:
Per aggiornare un elemento tramite ID, è necessario prima recuperare il libro tramite ID. Per questo, implementerai un metodo che recupera il libro tramite ID. È preferibile procedere in questo modo piuttosto che implementare la logica di recupero di un libro tramite ID direttamente nel metodo di aggiornamento del libro, poiché puoi riutilizzare questo metodo in altre funzioni, rendendolo più versatile.
Library.java
123456789public Book findBookById(int id) { Book result; for (Book book : books) { if (book.getId() == id){ result = book; } } return result; }
La soluzione sopra è una buona opzione, ma esiste un piccolo problema. Si verificherà un errore se tale ID non esiste nella nostra lista. È necessario gestire questo errore e visualizzare un messaggio sullo schermo che indichi che non esiste alcun libro con quell'ID nella lista (database).
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; }
Inizializziamo inizialmente la variabile result come null in questa soluzione. Dopo aver implementato la ricerca del libro tramite ID, eseguiamo un controllo per verificare se il nostro risultato è ancora null. Se è true, creiamo un nuovo libro indefinito.
Passiamo ora all'implementazione del metodo 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 } } }
Abbiamo aggiornato il libro modificando tutti i suoi parametri. Consiglio vivamente di procedere in questo modo perché, se semplicemente riassegnassimo il libro, potrebbero verificarsi errori imprevisti. In questo modo, aggiorniamo il libro tramite ID, riassegnandolo ai parametri del nuovo libro.
Ora, utilizziamo il metodo update e vediamo cosa succede:
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); } }
Ora, la classe Library dispone di tutte le operazioni CRUD.
Si consiglia di copiare i metodi mostrati in questo capitolo e aggiungerli al codice dell'esercizio precedente, poiché questo codice aggiornato sarà utile in seguito.
1. Cosa significa l'acronimo CRUD?
2. Perché è necessario implementare le operazioni CRUD nel proprio codice?
3. Le operazioni CRUD possono essere utilizzate con i database?
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Fantastico!
Completion tasso migliorato a 4
Operazioni CRUD in Java
Scorri per mostrare il menu
Operazioni di base per un database
Hai completato un esercizio pratico sulla gestione di una biblioteca, implementando metodi per aggiungere, recuperare e rimuovere elementi da una lista.
Queste operazioni sono fondamentali per quasi tutte le liste e applicazioni—sono note come operazioni CRUD!
CRUD è l'acronimo di CREATE, READ, UPDATE e DELETE, e rappresenta un insieme di operazioni da eseguire su un database.
Nel nostro caso, nell'esercizio precedente, la classe Library ha svolto il ruolo di database, in particolare la lista dei libri. Hai scritto operazioni fondamentali per lavorare con questa lista, personalizzando leggermente ciascuna di esse. Hai creato metodi più specifici per recuperare un libro tramite autore o ottenere una lista di libri pubblicati dopo un determinato anno.
Operazioni simili vengono impiegate in grandi applicazioni per interagire con i database. Alla fine, la nostra applicazione dovrebbe:
- Essere in grado di creare dati nel database;
- Essere in grado di leggere dati dal database;
- Essere in grado di aggiornare dati specifici nel database;
- Essere in grado di eliminare dati dal database.
Potresti aver notato che non hai implementato il metodo update nell'esercizio precedente.
Facciamolo ora:
Per aggiornare un elemento tramite ID, è necessario prima recuperare il libro tramite ID. Per questo, implementerai un metodo che recupera il libro tramite ID. È preferibile procedere in questo modo piuttosto che implementare la logica di recupero di un libro tramite ID direttamente nel metodo di aggiornamento del libro, poiché puoi riutilizzare questo metodo in altre funzioni, rendendolo più versatile.
Library.java
123456789public Book findBookById(int id) { Book result; for (Book book : books) { if (book.getId() == id){ result = book; } } return result; }
La soluzione sopra è una buona opzione, ma esiste un piccolo problema. Si verificherà un errore se tale ID non esiste nella nostra lista. È necessario gestire questo errore e visualizzare un messaggio sullo schermo che indichi che non esiste alcun libro con quell'ID nella lista (database).
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; }
Inizializziamo inizialmente la variabile result come null in questa soluzione. Dopo aver implementato la ricerca del libro tramite ID, eseguiamo un controllo per verificare se il nostro risultato è ancora null. Se è true, creiamo un nuovo libro indefinito.
Passiamo ora all'implementazione del metodo 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 } } }
Abbiamo aggiornato il libro modificando tutti i suoi parametri. Consiglio vivamente di procedere in questo modo perché, se semplicemente riassegnassimo il libro, potrebbero verificarsi errori imprevisti. In questo modo, aggiorniamo il libro tramite ID, riassegnandolo ai parametri del nuovo libro.
Ora, utilizziamo il metodo update e vediamo cosa succede:
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); } }
Ora, la classe Library dispone di tutte le operazioni CRUD.
Si consiglia di copiare i metodi mostrati in questo capitolo e aggiungerli al codice dell'esercizio precedente, poiché questo codice aggiornato sarà utile in seguito.
1. Cosa significa l'acronimo CRUD?
2. Perché è necessario implementare le operazioni CRUD nel proprio codice?
3. Le operazioni CRUD possono essere utilizzate con i database?
Grazie per i tuoi commenti!