CRUD-operasjoner i Java
Grunnleggende operasjoner for en database
Du har fullført en praktisk oppgave om bibliotekadministrasjon, hvor du implementerte metoder for å legge til, hente og fjerne elementer fra en liste.
Disse operasjonene er grunnleggende for nesten alle lister og applikasjoner—de kalles CRUD-operasjoner!
CRUD står for CREATE, READ, UPDATE og DELETE, og representerer en liste over operasjoner som skal utføres på en database.
I vårt tilfelle, i forrige oppgave, fungerte klassen Library som vår database, nærmere bestemt listen over bøker. Du skrev grunnleggende operasjoner for å arbeide med denne listen, og tilpasset hver av dem noe. Du laget mer spesialiserte metoder for å hente en bok etter forfatter eller skaffe en liste over bøker utgitt etter et bestemt år.
Tilsvarende operasjoner brukes i store applikasjoner for å samhandle med databaser. Til slutt bør applikasjonen vår:
- Kunne opprette data i databasen;
- Kunne lese data fra databasen;
- Kunne oppdatere spesifikke data i databasen;
- Kunne slette data fra databasen.
Du har kanskje lagt merke til at du ikke implementerte oppdateringsmetoden i forrige oppgave.
La oss gjøre det nå:
Du må først hente boken etter ID for å oppdatere et element etter ID. For dette skal du implementere en metode som henter boken etter ID. Det er bedre å gjøre det på denne måten enn å implementere logikken for å hente en bok etter ID direkte i oppdateringsmetoden, siden du da kan gjenbruke denne metoden i andre funksjoner, noe som gjør den mer allsidig.
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 alternativ, men det finnes et lite problem. Du vil få en feilmelding hvis en slik ID ikke finnes i listen vår. Du må håndtere denne feilen og vise en melding på skjermen som indikerer at det ikke finnes en slik bok 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 variabelen result som null i denne løsningen. Etter å ha implementert boksøk etter ID, utfører vi en sjekk for å se om resultatet vårt fortsatt er null. Hvis det er true, oppretter vi en ny udefinert bok.
La oss gå videre til implementeringen av 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 oppdaterte boken ved å oppdatere alle dens parametere. Det anbefales sterkt å gjøre det på denne måten, fordi hvis vi bare tildeler boken på nytt, kan uventede feil oppstå. På denne måten oppdaterer vi boken etter ID, og tildeler den på nytt til parameterne til den nye boken.
Nå skal vi bruke update-metoden og se hva som skjer:
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); } }
Nå har Library-klassen alle CRUD-operasjoner.
Det anbefales å kopiere metodene som er vist i dette kapittelet og legge dem til i koden fra forrige oppgave, da denne oppdaterte koden vil være nyttig senere.
1. Hva betyr forkortelsen CRUD?
2. Hvorfor er det nødvendig å implementere CRUD-operasjoner i koden din?
3. Kan CRUD-operasjoner brukes med databaser?
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
Fantastisk!
Completion rate forbedret til 4
CRUD-operasjoner i Java
Sveip for å vise menyen
Grunnleggende operasjoner for en database
Du har fullført en praktisk oppgave om bibliotekadministrasjon, hvor du implementerte metoder for å legge til, hente og fjerne elementer fra en liste.
Disse operasjonene er grunnleggende for nesten alle lister og applikasjoner—de kalles CRUD-operasjoner!
CRUD står for CREATE, READ, UPDATE og DELETE, og representerer en liste over operasjoner som skal utføres på en database.
I vårt tilfelle, i forrige oppgave, fungerte klassen Library som vår database, nærmere bestemt listen over bøker. Du skrev grunnleggende operasjoner for å arbeide med denne listen, og tilpasset hver av dem noe. Du laget mer spesialiserte metoder for å hente en bok etter forfatter eller skaffe en liste over bøker utgitt etter et bestemt år.
Tilsvarende operasjoner brukes i store applikasjoner for å samhandle med databaser. Til slutt bør applikasjonen vår:
- Kunne opprette data i databasen;
- Kunne lese data fra databasen;
- Kunne oppdatere spesifikke data i databasen;
- Kunne slette data fra databasen.
Du har kanskje lagt merke til at du ikke implementerte oppdateringsmetoden i forrige oppgave.
La oss gjøre det nå:
Du må først hente boken etter ID for å oppdatere et element etter ID. For dette skal du implementere en metode som henter boken etter ID. Det er bedre å gjøre det på denne måten enn å implementere logikken for å hente en bok etter ID direkte i oppdateringsmetoden, siden du da kan gjenbruke denne metoden i andre funksjoner, noe som gjør den mer allsidig.
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 alternativ, men det finnes et lite problem. Du vil få en feilmelding hvis en slik ID ikke finnes i listen vår. Du må håndtere denne feilen og vise en melding på skjermen som indikerer at det ikke finnes en slik bok 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 variabelen result som null i denne løsningen. Etter å ha implementert boksøk etter ID, utfører vi en sjekk for å se om resultatet vårt fortsatt er null. Hvis det er true, oppretter vi en ny udefinert bok.
La oss gå videre til implementeringen av 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 oppdaterte boken ved å oppdatere alle dens parametere. Det anbefales sterkt å gjøre det på denne måten, fordi hvis vi bare tildeler boken på nytt, kan uventede feil oppstå. På denne måten oppdaterer vi boken etter ID, og tildeler den på nytt til parameterne til den nye boken.
Nå skal vi bruke update-metoden og se hva som skjer:
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); } }
Nå har Library-klassen alle CRUD-operasjoner.
Det anbefales å kopiere metodene som er vist i dette kapittelet og legge dem til i koden fra forrige oppgave, da denne oppdaterte koden vil være nyttig senere.
1. Hva betyr forkortelsen CRUD?
2. Hvorfor er det nødvendig å implementere CRUD-operasjoner i koden din?
3. Kan CRUD-operasjoner brukes med databaser?
Takk for tilbakemeldingene dine!