Table of contents
Open Table of contents
¿Que es Spring Data?
Spring data es una serie de proyectos soportados por spring para simplificar la capa de datos en las aplicaciones utilizando la especificación JPA (Java Persistence API).
-
Acceso a bases de datos relacionales: Spring Data JPA simplifica el acceso y la manipulación de datos en bases de datos relacionales. Proporciona un conjunto de métodos y operaciones predefinidas para realizar consultas, actualizar registros y administrar transacciones en bases de datos a través de la interfaz de JPA.
-
Operaciones CRUD: Spring Data JPA facilita las operaciones CRUD (Crear, Leer, Actualizar, Eliminar) en la base de datos. Proporciona métodos predefinidos para guardar, recuperar, actualizar y eliminar registros, lo que reduce la necesidad de escribir consultas SQL personalizadas.
-
Consultas personalizadas: Aunque Spring Data JPA proporciona métodos predefinidos para operaciones CRUD, también permite escribir consultas personalizadas utilizando JPQL (Java Persistence Query Language) o consultas SQL nativas. Esto es útil cuando se necesitan operaciones más complejas o consultas específicas que no se pueden lograr con los métodos predefinidos.
-
Paginación y clasificación: Spring Data JPA facilita la implementación de paginación y clasificación en las consultas. Proporciona métodos para especificar el número de resultados por página y la página actual, así como opciones de clasificación por uno o varios campos.
-
Relaciones entre entidades: Spring Data JPA simplifica el manejo de relaciones entre entidades en la base de datos. Puede establecer relaciones uno a uno, uno a muchos y muchos a muchos utilizando anotaciones como @OneToOne, @OneToMany, @ManyToOne y @ManyToMany, lo que facilita la navegación y la manipulación de los datos relacionados.
-
Transacciones: Spring Data JPA facilita la administración de transacciones en las operaciones de base de datos. Puede utilizar anotaciones como @Transactional para definir transacciones en los métodos de servicio, asegurando que las operaciones se realicen de manera atómica y coherente.
-
Integración con otros módulos de Spring: Spring Data JPA se integra perfectamente con otros módulos de Spring, como Spring MVC y Spring Boot. Esto permite construir aplicaciones completas y coherentes utilizando la infraestructura de Spring, aprovechando las características adicionales que proporcionan estos módulos.
Modulos principales
Estos son algunos de los principales modulos utilizados de spring data.
- Sprig Data Commons
- Spring Data REST
- Spring Data JPA
- Spring Data JDBC
- Spring Data for Apache Cassandra
- Spring Data MongoDB
- Spring Data Neo4j
- Spring Data Redis
Spring Data JPA
Spring Data JPA simplifica el acceso y la manipulación de datos en aplicaciones Java, reduciendo la necesidad de escribir consultas SQL personalizadas y brindando una capa de abstracción para interactuar con la capa de persistencia de manera más sencilla y eficiente.
Para lograr el mapeo entre las clases java y las tablas en las bases de datos hacemos uso de ciertas anotaciones.
Ulgunas de ellas son:
Al utilizar estas anotaciones, podemos definir la estructura de nuestras tablas de base de datos y establecer relaciones entre las diferentes entidades de nuestra aplicación.
-
@Entity
: Esta anotación se coloca encima de una clase de Java para indicar que es una entidad JPA y debe ser mapeada a una tabla en la base de datos. -
@Table
: Se utiliza para especificar el nombre de la tabla en la base de datos a la que se debe asociar la entidad. También se puede usar para definir el esquema y otros detalles relacionados con la tabla. -
@Id
: Marca un atributo como clave primaria de la entidad. Esto se utiliza para identificar de forma única cada registro en la tabla. -
@GeneratedValue
: Se utiliza para especificar cómo se generará el valor de la clave primaria automáticamente. Puede tener diferentes estrategias, comoGenerationType.IDENTITY
,GenerationType.SEQUENCE
,GenerationType.AUTO
, entre otras. -
@Column
: Se usa para especificar detalles de mapeo para una columna específica en la tabla de base de datos. Esto incluye el nombre de la columna, la longitud, la precisión, etc. -
@OneToMany
: Utilizado para establecer una relación uno a muchos entre dos entidades. Se usa para mapear una colección de objetos en una entidad a una colección de registros en otra entidad. -
@ManyToOne
: Se utiliza para establecer una relación muchos a uno entre dos entidades. Se utiliza para mapear una clave foránea en una entidad a una relación con otra entidad. -
@ManyToMany
: Usado para establecer una relación muchos a muchos entre dos entidades. Se utiliza para mapear una colección de objetos en una entidad a una colección de registros en otra entidad.
Caso de uso
Para poner en practica las anotaciones anteriores en el siguiente ejemplo se simulara un escenario en donde se tienen las entidades Propietario y Automovil.
Estas entidades estan relacionadas de la siguiente manera
Entidad Automovil
1.- En la clase anterior “Automovil”, se usa la anotacion
@Entity
justo arriba de la clase para declarar la clase como Entidad
2.- La notacion
@Data
es parte de la libreria Lombok lo que permite la generacion automatica de getters y setters
3.- Se necesita una llave primaria para establecer relaciones, esto se logra mediante el uso de la anotacion
@Id
, acompañado de@GeneratedValue para indicar la manera en que el Id sera generado
4.- Se agregan mas atributos
5.- Para crear una relacion muchos a uno se usa la anotacion
@ManyToOne
seguido de la anotacion@JoinColum
que realiza el mapeo con el id de la entidad Propietario en el atributo propietario.
Entidad propietario
1.- Para la definir la entidad Propietario se utilizan las mismas anotaciones utilizadas anteriormente.
2.- Adicinalmente para establecer una relacion uno a muchos se usa la notacion
@OneToMany
Diagrama Entidad-Relacion
Usando IntelliJ podemos visualizar las entidades y relaciones en el diagrama generado a partir de la declaracion de dichas entidades.