CRUD-Operationer i Java
Grundlæggende operationer for en database
Du har gennemført en praktisk opgave om biblioteksstyring, hvor du implementerede metoder til tilføjelse, hentning og fjernelse af elementer fra en liste.
Disse operationer er grundlæggende for næsten enhver liste og applikation—de kaldes CRUD-operationer!
CRUD står for CREATE, READ, UPDATE og DELETE, hvilket repræsenterer en liste over operationer, der skal udføres på en database.
I vores tilfælde fungerede klassen Library i den forrige opgave som vores database, specifikt listen over bøger. Du skrev grundlæggende operationer til at arbejde med denne liste og tilpassede hver af dem en smule. Du oprettede mere fokuserede metoder til at hente en bog efter forfatter eller at få en liste over bøger udgivet efter et bestemt år.
Tilsvarende operationer anvendes i store applikationer til at interagere med databaser. Til sidst skal vores applikation:
- Kunne oprette data i databasen;
- Kunne læse data fra databasen;
- Kunne opdatere specifikke data i databasen;
- Kunne slette data fra databasen.
Du har måske bemærket, at du ikke implementerede update-metoden i den forrige opgave.
Lad os gøre det nu:
Du skal først hente bogen via ID for at opdatere et element via ID. Til dette implementerer du en metode, der henter bogen via ID. Det er bedre at gøre det på denne måde end at implementere logikken for at hente en bog via dens ID direkte i bogens opdateringsmetode, da du kan genbruge denne metode i andre funktioner, hvilket gør den mere alsidig.
Library.java
123456789public Book findBookById(int id) { Book result; for (Book book : books) { if (book.getId() == id){ result = book; } } return result; }
Løsningen ovenfor er et godt valg, men der er et lille problem. Du vil få en fejl, hvis et sådant ID ikke findes i vores liste. Du skal håndtere denne fejl og vise en besked på skærmen, der angiver, at der ikke findes en sådan bog i listen (databasen).
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; }
Vi initialiserer først variablen result som null i denne løsning. Efter at have implementeret bogsøgningen via ID, foretager vi en kontrol for at se, om vores resultat stadig er null. Hvis det er true, opretter vi en ny udefineret bog.
Lad os gå videre til implementeringen af update-metoden:
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 } } }
Vi opdaterede bogen ved at opdatere alle dens parametre. Det anbefales stærkt at gøre det på denne måde, da der kan opstå uventede fejl, hvis vi blot tildeler bogen på ny. På denne måde opdaterer vi bogen via ID og tildeler den de nye bogparametre.
Lad os nu bruge update-metoden og se, hvad der sker:
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); } }
Nu har Library-klassen alle CRUD-operationer.
Det anbefales at kopiere metoderne, der blev vist i dette kapitel, og tilføje dem til din kode fra den tidligere opgave, da denne opdaterede kode vil være nyttig senere.
1. Hvad betyder forkortelsen CRUD?
2. Hvorfor er det nødvendigt at implementere CRUD-operationer i din kode?
3. Kan CRUD-operationer bruges med databaser?
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
Fantastisk!
Completion rate forbedret til 4
CRUD-Operationer i Java
Stryg for at vise menuen
Grundlæggende operationer for en database
Du har gennemført en praktisk opgave om biblioteksstyring, hvor du implementerede metoder til tilføjelse, hentning og fjernelse af elementer fra en liste.
Disse operationer er grundlæggende for næsten enhver liste og applikation—de kaldes CRUD-operationer!
CRUD står for CREATE, READ, UPDATE og DELETE, hvilket repræsenterer en liste over operationer, der skal udføres på en database.
I vores tilfælde fungerede klassen Library i den forrige opgave som vores database, specifikt listen over bøger. Du skrev grundlæggende operationer til at arbejde med denne liste og tilpassede hver af dem en smule. Du oprettede mere fokuserede metoder til at hente en bog efter forfatter eller at få en liste over bøger udgivet efter et bestemt år.
Tilsvarende operationer anvendes i store applikationer til at interagere med databaser. Til sidst skal vores applikation:
- Kunne oprette data i databasen;
- Kunne læse data fra databasen;
- Kunne opdatere specifikke data i databasen;
- Kunne slette data fra databasen.
Du har måske bemærket, at du ikke implementerede update-metoden i den forrige opgave.
Lad os gøre det nu:
Du skal først hente bogen via ID for at opdatere et element via ID. Til dette implementerer du en metode, der henter bogen via ID. Det er bedre at gøre det på denne måde end at implementere logikken for at hente en bog via dens ID direkte i bogens opdateringsmetode, da du kan genbruge denne metode i andre funktioner, hvilket gør den mere alsidig.
Library.java
123456789public Book findBookById(int id) { Book result; for (Book book : books) { if (book.getId() == id){ result = book; } } return result; }
Løsningen ovenfor er et godt valg, men der er et lille problem. Du vil få en fejl, hvis et sådant ID ikke findes i vores liste. Du skal håndtere denne fejl og vise en besked på skærmen, der angiver, at der ikke findes en sådan bog i listen (databasen).
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; }
Vi initialiserer først variablen result som null i denne løsning. Efter at have implementeret bogsøgningen via ID, foretager vi en kontrol for at se, om vores resultat stadig er null. Hvis det er true, opretter vi en ny udefineret bog.
Lad os gå videre til implementeringen af update-metoden:
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 } } }
Vi opdaterede bogen ved at opdatere alle dens parametre. Det anbefales stærkt at gøre det på denne måde, da der kan opstå uventede fejl, hvis vi blot tildeler bogen på ny. På denne måde opdaterer vi bogen via ID og tildeler den de nye bogparametre.
Lad os nu bruge update-metoden og se, hvad der sker:
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); } }
Nu har Library-klassen alle CRUD-operationer.
Det anbefales at kopiere metoderne, der blev vist i dette kapitel, og tilføje dem til din kode fra den tidligere opgave, da denne opdaterede kode vil være nyttig senere.
1. Hvad betyder forkortelsen CRUD?
2. Hvorfor er det nødvendigt at implementere CRUD-operationer i din kode?
3. Kan CRUD-operationer bruges med databaser?
Tak for dine kommentarer!