Agregar la Base de Datos a Nuestra Aplicación
En el capítulo anterior, cubrimos qué son JPA y Hibernate. En este capítulo, integraremos una base de datos en nuestra aplicación e intentaremos realizar operaciones CRUD (Crear, Leer, Actualizar, Eliminar).
Ejemplo de trabajo con una base de datos:
Personalización del modelo
Lo primero que debemos hacer es anotar el modelo para que Hibernate pueda trabajar con él y comprender a qué tabla pertenece.
Book.java
12345678910@Getter @Setter @Entity(name = "book") @Table(name = "book") public class Book { private String id; private String name; private String author; private String price; }
En la anotación @Entity(name = "books"), el parámetro name permite especificar el nombre de la entidad, que por defecto es el nombre de la clase.
La anotación @Table se utiliza para especificar configuraciones específicas para la tabla asociada con la entidad.
En nuestro caso, esta tabla se crea mediante migraciones, por lo que no es necesario crearla manualmente.
También necesitamos que nuestra entidad genere automáticamente un ID para asignarle un valor único en la base de datos. Para lograr esto, se puede utilizar la anotación @Id en el campo que representa nuestro ID, junto con la anotación @GeneratedValue.
@Id
@GeneratedValue(strategy = GenerationType.UUID)
private String id;
Las anotaciones @Id y @GeneratedValue(strategy = GenerationType.UUID) especifican que el campo id es una clave primaria que se genera automáticamente en formato UUID.
Esto garantiza identificadores de cadena únicos para cada registro en la tabla, lo cual es beneficioso para sistemas distribuidos y asegura la unicidad global de los identificadores. Los UUID se almacenan como cadenas.
Agregar el repositorio
Actualmente, nuestro repositorio simula una base de datos almacenando todas las entidades en una List. Pero, ¿y si te dijera que usar una base de datos real es en realidad mucho más sencillo?
Para interactuar con una base de datos real, podemos utilizar la interfaz JpaRepository, que proporciona una amplia gama de métodos integrados para trabajar con datos.
BookRepository.java
1234@Repository public interface BookRepository extends JpaRepository<Book, String> { // JpaRepository already provides methods for CRUD operations }
En JpaRepository<Book, String>, pasamos dos parámetros: Book, que representa el tipo de entidad con el que trabajará el repositorio, y String, que es el tipo de dato de la clave primaria (ID) para la entidad Book.
¡Y eso es todo lo que necesitamos! Ahora tenemos un repositorio completamente funcional.
Métodos principales de JpaRepository
Creación de consultas SQL personalizadas
Spring Data JPA puede generar consultas automáticamente si el método se nombra siguiendo un patrón que se alinea con la estructura de los datos. Esto se realiza utilizando palabras clave específicas que indican cómo debe construirse la consulta.
Resumen breve del video
List<Book> findBookByAuthor(String author);
Este método genera automáticamente una consulta SQL que busca todos los libros por el autor author. La consulta generada tendrá el siguiente aspecto:
SELECT * FROM book WHERE author = ?;
Cómo funciona
El nombre del método findBookByAuthor(String author) se construye de la siguiente manera: comienza con el prefijo findBook, lo que indica que el método realiza una búsqueda. A continuación, aparece ByAuthor, que representa el campo en la entidad Book que se utilizará para la búsqueda.
Cuando se llama a este método, Spring Data JPA genera automáticamente una consulta que busca los registros donde el campo author coincide con el parámetro proporcionado.
Generación de consultas SQL con @Query
La anotación @Query en Spring Data JPA permite utilizar tanto JPQL como SQL nativo, proporcionando flexibilidad en la selección del enfoque adecuado.
JPQL
JPQL (Java Persistence Query Language) funciona con objetos y sus propiedades.
@Query("SELECT b FROM book b WHERE b.author = :author")
List<Book> findBookByAuthor(String author);
Esta consulta busca todos los objetos Book donde el campo author coincide con el valor proporcionado. JPQL es más abstracto y refleja la estructura del modelo de datos.
SQL nativo
SQL nativo interactúa directamente con las tablas de la base de datos.
@Query(value = "SELECT * FROM books WHERE author = :author", nativeQuery = true)
List<Book> findBookByAuthor(String author);
En este caso, la consulta opera sobre la tabla book, permitiendo el uso de funciones SQL específicas y optimizaciones.
Elección de un enfoque
Si se necesita una consulta simple que se ajuste al modelo de datos, utilice JPQL. Si se requiere una consulta compleja o funciones específicas de la base de datos, elija SQL nativo.
De este modo, @Query proporciona la flexibilidad para cambiar fácilmente entre ambos enfoques según las necesidades.
¡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
Awesome!
Completion rate improved to 3.45
Agregar la Base de Datos a Nuestra Aplicación
Desliza para mostrar el menú
En el capítulo anterior, cubrimos qué son JPA y Hibernate. En este capítulo, integraremos una base de datos en nuestra aplicación e intentaremos realizar operaciones CRUD (Crear, Leer, Actualizar, Eliminar).
Ejemplo de trabajo con una base de datos:
Personalización del modelo
Lo primero que debemos hacer es anotar el modelo para que Hibernate pueda trabajar con él y comprender a qué tabla pertenece.
Book.java
12345678910@Getter @Setter @Entity(name = "book") @Table(name = "book") public class Book { private String id; private String name; private String author; private String price; }
En la anotación @Entity(name = "books"), el parámetro name permite especificar el nombre de la entidad, que por defecto es el nombre de la clase.
La anotación @Table se utiliza para especificar configuraciones específicas para la tabla asociada con la entidad.
En nuestro caso, esta tabla se crea mediante migraciones, por lo que no es necesario crearla manualmente.
También necesitamos que nuestra entidad genere automáticamente un ID para asignarle un valor único en la base de datos. Para lograr esto, se puede utilizar la anotación @Id en el campo que representa nuestro ID, junto con la anotación @GeneratedValue.
@Id
@GeneratedValue(strategy = GenerationType.UUID)
private String id;
Las anotaciones @Id y @GeneratedValue(strategy = GenerationType.UUID) especifican que el campo id es una clave primaria que se genera automáticamente en formato UUID.
Esto garantiza identificadores de cadena únicos para cada registro en la tabla, lo cual es beneficioso para sistemas distribuidos y asegura la unicidad global de los identificadores. Los UUID se almacenan como cadenas.
Agregar el repositorio
Actualmente, nuestro repositorio simula una base de datos almacenando todas las entidades en una List. Pero, ¿y si te dijera que usar una base de datos real es en realidad mucho más sencillo?
Para interactuar con una base de datos real, podemos utilizar la interfaz JpaRepository, que proporciona una amplia gama de métodos integrados para trabajar con datos.
BookRepository.java
1234@Repository public interface BookRepository extends JpaRepository<Book, String> { // JpaRepository already provides methods for CRUD operations }
En JpaRepository<Book, String>, pasamos dos parámetros: Book, que representa el tipo de entidad con el que trabajará el repositorio, y String, que es el tipo de dato de la clave primaria (ID) para la entidad Book.
¡Y eso es todo lo que necesitamos! Ahora tenemos un repositorio completamente funcional.
Métodos principales de JpaRepository
Creación de consultas SQL personalizadas
Spring Data JPA puede generar consultas automáticamente si el método se nombra siguiendo un patrón que se alinea con la estructura de los datos. Esto se realiza utilizando palabras clave específicas que indican cómo debe construirse la consulta.
Resumen breve del video
List<Book> findBookByAuthor(String author);
Este método genera automáticamente una consulta SQL que busca todos los libros por el autor author. La consulta generada tendrá el siguiente aspecto:
SELECT * FROM book WHERE author = ?;
Cómo funciona
El nombre del método findBookByAuthor(String author) se construye de la siguiente manera: comienza con el prefijo findBook, lo que indica que el método realiza una búsqueda. A continuación, aparece ByAuthor, que representa el campo en la entidad Book que se utilizará para la búsqueda.
Cuando se llama a este método, Spring Data JPA genera automáticamente una consulta que busca los registros donde el campo author coincide con el parámetro proporcionado.
Generación de consultas SQL con @Query
La anotación @Query en Spring Data JPA permite utilizar tanto JPQL como SQL nativo, proporcionando flexibilidad en la selección del enfoque adecuado.
JPQL
JPQL (Java Persistence Query Language) funciona con objetos y sus propiedades.
@Query("SELECT b FROM book b WHERE b.author = :author")
List<Book> findBookByAuthor(String author);
Esta consulta busca todos los objetos Book donde el campo author coincide con el valor proporcionado. JPQL es más abstracto y refleja la estructura del modelo de datos.
SQL nativo
SQL nativo interactúa directamente con las tablas de la base de datos.
@Query(value = "SELECT * FROM books WHERE author = :author", nativeQuery = true)
List<Book> findBookByAuthor(String author);
En este caso, la consulta opera sobre la tabla book, permitiendo el uso de funciones SQL específicas y optimizaciones.
Elección de un enfoque
Si se necesita una consulta simple que se ajuste al modelo de datos, utilice JPQL. Si se requiere una consulta compleja o funciones específicas de la base de datos, elija SQL nativo.
De este modo, @Query proporciona la flexibilidad para cambiar fácilmente entre ambos enfoques según las necesidades.
¡Gracias por tus comentarios!