Què és Spring Data JPA?
Spring Data JPA és un projecte de Spring que facilita l'accés a bases de dades relacionals utilitzant l'API de Java Persistence (JPA). Proporciona una capa d'abstracció sobre JPA, simplificant la implementació de repositoris i la gestió de dades.
Objectius de Spring Data JPA:
- Simplificar l'accés a dades.
- Reduir la quantitat de codi boilerplate necessari per a les operacions de persistència.
- Proporcionar una API coherent i fàcil d'utilitzar per a la gestió de dades.
Característiques clau de Spring Data JPA
- Repositoris: Proporciona una interfície de repositori que simplifica les operacions CRUD (Create, Read, Update, Delete).
- Consultes derivades: Permet la creació de consultes basades en el nom del mètode.
- Consultes personalitzades: Suporta consultes JPQL (Java Persistence Query Language) i SQL natiu.
- Paginació i ordenació: Facilita la paginació i l'ordenació dels resultats de les consultes.
- Auditoria: Proporciona suport per a l'auditoria de les entitats.
Configuració de Spring Data JPA
Dependències Maven
Per començar a utilitzar Spring Data JPA, necessitem afegir les següents dependències al nostre fitxer pom.xml
:
<dependencies> <!-- Dependència de Spring Boot Starter Data JPA --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- Dependència del driver de la base de dades (per exemple, H2) --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> </dependencies>
Configuració de l'aplicació
Afegim la configuració de la base de dades al fitxer application.properties
:
# Configuració de la base de dades H2 spring.datasource.url=jdbc:h2:mem:testdb spring.datasource.driverClassName=org.h2.Driver spring.datasource.username=sa spring.datasource.password=password spring.jpa.database-platform=org.hibernate.dialect.H2Dialect spring.h2.console.enabled=true
Creant una Entitat JPA
Una entitat JPA és una classe Java que representa una taula a la base de dades. A continuació, crearem una entitat User
:
import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private String email; // Getters i Setters public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
Creant un Repositori
Un repositori és una interfície que proporciona mètodes per a les operacions CRUD. Spring Data JPA genera automàticament la implementació d'aquesta interfície.
import org.springframework.data.jpa.repository.JpaRepository; public interface UserRepository extends JpaRepository<User, Long> { // Mètodes de consulta personalitzats es poden afegir aquí }
Exemple pràctic
Guardar un usuari
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class UserService { @Autowired private UserRepository userRepository; public User saveUser(User user) { return userRepository.save(user); } }
Recuperar tots els usuaris
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class UserService { @Autowired private UserRepository userRepository; public List<User> getAllUsers() { return userRepository.findAll(); } }
Exercicis pràctics
Exercici 1: Crear una entitat Product
- Crea una nova entitat
Product
amb els següents camps:id
,name
,price
. - Crea un repositori per a l'entitat
Product
. - Implementa un servei que permeti guardar i recuperar productes.
Solució
Entitat Product
import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity public class Product { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private Double price; // Getters i Setters public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Double getPrice() { return price; } public void setPrice(Double price) { this.price = price; } }
Repositori ProductRepository
import org.springframework.data.jpa.repository.JpaRepository; public interface ProductRepository extends JpaRepository<Product, Long> { // Mètodes de consulta personalitzats es poden afegir aquí }
Servei ProductService
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class ProductService { @Autowired private ProductRepository productRepository; public Product saveProduct(Product product) { return productRepository.save(product); } public List<Product> getAllProducts() { return productRepository.findAll(); } }
Resum
En aquesta secció, hem introduït Spring Data JPA, una eina poderosa per simplificar l'accés a bases de dades relacionals en aplicacions Spring Boot. Hem après a configurar Spring Data JPA, crear entitats JPA, repositoris i serveis per gestionar les operacions de persistència. A més, hem proporcionat un exercici pràctic per reforçar els conceptes apresos. En el següent mòdul, explorarem com configurar fonts de dades en Spring Boot.
Curs de Spring Boot
Mòdul 1: Introducció a Spring Boot
- Què és Spring Boot?
- Configuració del teu entorn de desenvolupament
- Creant la teva primera aplicació Spring Boot
- Entenent l'estructura del projecte Spring Boot
Mòdul 2: Conceptes bàsics de Spring Boot
- Anotacions de Spring Boot
- Injecció de dependències a Spring Boot
- Configuració de Spring Boot
- Propietats de Spring Boot
Mòdul 3: Construint serveis web RESTful
- Introducció als serveis web RESTful
- Creant controladors REST
- Gestionant mètodes HTTP
- Gestió d'excepcions en REST
Mòdul 4: Accés a dades amb Spring Boot
- Introducció a Spring Data JPA
- Configuració de fonts de dades
- Creant entitats JPA
- Utilitzant repositoris de Spring Data
- Mètodes de consulta a Spring Data JPA
Mòdul 5: Seguretat a Spring Boot
- Introducció a Spring Security
- Configuració de Spring Security
- Autenticació i autorització d'usuaris
- Implementant autenticació JWT
Mòdul 6: Proves a Spring Boot
Mòdul 7: Funcions avançades de Spring Boot
Mòdul 8: Desplegant aplicacions Spring Boot
Mòdul 9: Rendiment i monitorització
- Optimització del rendiment
- Monitorització amb Spring Boot Actuator
- Utilitzant Prometheus i Grafana
- Gestió de registres i logs