En aquest tema, aprendrem a crear entitats JPA (Java Persistence API) utilitzant Spring Boot. Les entitats JPA són classes Java que representen taules en una base de dades relacional. Aquestes classes ens permeten mapar les dades de la base de dades a objectes Java, facilitant així la manipulació de dades dins de l'aplicació.
Objectius
- Entendre què és una entitat JPA.
- Aprendre a crear una entitat JPA.
- Configurar les relacions entre entitats.
- Utilitzar anotacions JPA per definir el mapeig de les entitats.
Què és una entitat JPA?
Una entitat JPA és una classe Java que està anotada amb @Entity
i representa una taula en una base de dades. Cada instància de l'entitat correspon a una fila de la taula. Les propietats de la classe es mapen a les columnes de la taula.
Creant una entitat JPA
Pas 1: Definir la classe de l'entitat
Comencem creant una classe Java que representi la nostra entitat. Per exemple, crearem una entitat User
que representi una taula d'usuaris.
import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String username; private String password; private String email; // Constructors, getters i setters public User() {} public User(String username, String password, String email) { this.username = username; this.password = password; this.email = email; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }
Explicació del codi
@Entity
: Aquesta anotació indica que la classe és una entitat JPA.@Id
: Marca el campid
com la clau primària de l'entitat.@GeneratedValue(strategy = GenerationType.IDENTITY)
: Indica que el valor deid
es generarà automàticament per la base de dades.- Les propietats
username
,password
iemail
es mapen a les columnes de la taulaUser
.
Pas 2: Configurar les relacions entre entitats
Les entitats poden tenir relacions entre elles, com ara un a molts, molts a un, o molts a molts. Utilitzarem anotacions JPA per definir aquestes relacions.
Exemple: Relació un a molts
Suposem que un usuari pot tenir molts articles (Article
). Definim la relació un a molts entre User
i Article
.
import javax.persistence.*; import java.util.List; @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String username; private String password; private String email; @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true) private List<Article> articles; // Constructors, getters i setters // ... }
import javax.persistence.*; @Entity public class Article { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String title; private String content; @ManyToOne @JoinColumn(name = "user_id") private User user; // Constructors, getters i setters // ... }
Explicació del codi
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true)
: Defineix una relació un a molts entreUser
iArticle
. El campmappedBy
indica que la relació es maparà a través del campuser
de l'entitatArticle
.@ManyToOne
: Defineix una relació molts a un entreArticle
iUser
.@JoinColumn(name = "user_id")
: Especifica la columna de la taulaArticle
que conté la clau forana que apunta a la taulaUser
.
Exercici pràctic
Exercici 1: Crear una entitat Product
-
Crea una classe
Product
que representi una taula de productes amb els següents camps:id
(clau primària, generada automàticament)name
(nom del producte)price
(preu del producte)description
(descripció del producte)
-
Defineix els constructors, getters i setters per a la classe
Product
.
Solució
import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; @Entity public class Product { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private Double price; private String description; // Constructors, getters i setters public Product() {} public Product(String name, Double price, String description) { this.name = name; this.price = price; this.description = description; } 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; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } }
Resum
En aquest tema, hem après a crear entitats JPA utilitzant Spring Boot. Hem vist com definir una classe d'entitat, com configurar les relacions entre entitats i com utilitzar anotacions JPA per definir el mapeig de les entitats. També hem practicat creant una entitat Product
. En el proper tema, aprendrem a utilitzar repositoris de Spring Data per accedir a les dades emmagatzemades en aquestes entitats.
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