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
Productamb 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
