Operaciones CRUD en Java
Operaciones básicas para una base de datos
Se completó una tarea práctica sobre gestión de bibliotecas, implementando métodos para agregar, recuperar y eliminar elementos de una lista.
Estas operaciones son fundamentales para casi todas las listas y aplicaciones; se conocen como operaciones CRUD.
CRUD significa CREAR, LEER, ACTUALIZAR y ELIMINAR, representando una lista de operaciones que se realizan en una base de datos.
En este caso, en la tarea anterior, la clase Library funcionó como nuestra base de datos, específicamente la lista de libros. Se escribieron operaciones fundamentales para trabajar con esta lista, personalizando ligeramente cada una de ellas. Se crearon métodos más específicos para recuperar un libro por autor u obtener una lista de libros publicados después de un año específico.
Operaciones similares se emplean en aplicaciones grandes para interactuar con bases de datos. Al final, la aplicación debe:
- Poder crear datos en la base de datos;
- Poder leer datos de la base de datos;
- Poder actualizar datos específicos en la base de datos;
- Poder eliminar datos de la base de datos.
Es posible que haya notado que no se implementó el método actualizar en la tarea anterior.
Vamos a hacerlo ahora:
Primero, es necesario recuperar el libro por ID para actualizar un elemento por ID. Para esto, se implementará un método que obtenga el libro por ID. Es preferible hacerlo de esta manera en lugar de implementar la lógica de obtener un libro por su ID dentro del método de actualización, ya que se puede reutilizar este método en otras funciones, haciéndolo más versátil.
Library.java
123456789public Book findBookById(int id) { Book result; for (Book book : books) { if (book.getId() == id){ result = book; } } return result; }
La solución anterior es una buena opción, pero existe un pequeño problema. Obtendrás un error si dicho ID no existe en nuestra lista. Es necesario manejar este error y mostrar un mensaje en pantalla indicando que no existe tal libro en la lista (base de datos).
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; }
Inicialmente, inicializamos la variable result como null en esta solución. Después de implementar la búsqueda de libros por ID, realizamos una comprobación para ver si nuestro resultado sigue siendo null. Si es true, creamos un nuevo libro indefinido.
Pasemos a implementar el método 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 } } }
Actualizamos el libro modificando todos sus parámetros. Se recomienda encarecidamente hacerlo de esta manera porque, si simplemente reasignamos el libro, pueden ocurrir errores inesperados. De este modo, actualizamos el libro por ID, reasignándolo a los parámetros del nuevo libro.
Ahora, utilicemos el método update y observemos qué sucede:
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); } }
Ahora, la clase Library incluye todas las operaciones CRUD.
Se recomienda copiar los métodos presentados en este capítulo y agregarlos al código del ejercicio anterior, ya que este código actualizado será útil más adelante.
1. ¿Qué significa el acrónimo CRUD?
2. ¿Por qué es necesario implementar operaciones CRUD en su código?
3. ¿Se pueden utilizar operaciones CRUD con bases de datos?
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla
Genial!
Completion tasa mejorada a 4
Operaciones CRUD en Java
Desliza para mostrar el menú
Operaciones básicas para una base de datos
Se completó una tarea práctica sobre gestión de bibliotecas, implementando métodos para agregar, recuperar y eliminar elementos de una lista.
Estas operaciones son fundamentales para casi todas las listas y aplicaciones; se conocen como operaciones CRUD.
CRUD significa CREAR, LEER, ACTUALIZAR y ELIMINAR, representando una lista de operaciones que se realizan en una base de datos.
En este caso, en la tarea anterior, la clase Library funcionó como nuestra base de datos, específicamente la lista de libros. Se escribieron operaciones fundamentales para trabajar con esta lista, personalizando ligeramente cada una de ellas. Se crearon métodos más específicos para recuperar un libro por autor u obtener una lista de libros publicados después de un año específico.
Operaciones similares se emplean en aplicaciones grandes para interactuar con bases de datos. Al final, la aplicación debe:
- Poder crear datos en la base de datos;
- Poder leer datos de la base de datos;
- Poder actualizar datos específicos en la base de datos;
- Poder eliminar datos de la base de datos.
Es posible que haya notado que no se implementó el método actualizar en la tarea anterior.
Vamos a hacerlo ahora:
Primero, es necesario recuperar el libro por ID para actualizar un elemento por ID. Para esto, se implementará un método que obtenga el libro por ID. Es preferible hacerlo de esta manera en lugar de implementar la lógica de obtener un libro por su ID dentro del método de actualización, ya que se puede reutilizar este método en otras funciones, haciéndolo más versátil.
Library.java
123456789public Book findBookById(int id) { Book result; for (Book book : books) { if (book.getId() == id){ result = book; } } return result; }
La solución anterior es una buena opción, pero existe un pequeño problema. Obtendrás un error si dicho ID no existe en nuestra lista. Es necesario manejar este error y mostrar un mensaje en pantalla indicando que no existe tal libro en la lista (base de datos).
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; }
Inicialmente, inicializamos la variable result como null en esta solución. Después de implementar la búsqueda de libros por ID, realizamos una comprobación para ver si nuestro resultado sigue siendo null. Si es true, creamos un nuevo libro indefinido.
Pasemos a implementar el método 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 } } }
Actualizamos el libro modificando todos sus parámetros. Se recomienda encarecidamente hacerlo de esta manera porque, si simplemente reasignamos el libro, pueden ocurrir errores inesperados. De este modo, actualizamos el libro por ID, reasignándolo a los parámetros del nuevo libro.
Ahora, utilicemos el método update y observemos qué sucede:
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); } }
Ahora, la clase Library incluye todas las operaciones CRUD.
Se recomienda copiar los métodos presentados en este capítulo y agregarlos al código del ejercicio anterior, ya que este código actualizado será útil más adelante.
1. ¿Qué significa el acrónimo CRUD?
2. ¿Por qué es necesario implementar operaciones CRUD en su código?
3. ¿Se pueden utilizar operaciones CRUD con bases de datos?
¡Gracias por tus comentarios!