Veamos un ejemplo de entidad de jpa:
📄 Persona.java
package com.ejemplo.demo.entidad;
import jakarta.persistence.*;
@Entity
public class Persona {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nombre;
private String email;
// Constructores
public Persona() {}
public Persona(String nombre, String email) {
this.nombre = nombre;
this.email = email;
}
// Getters y setters
public Long getId() { return id; }
public String getNombre() { return nombre; }
public void setNombre(String nombre) { this.nombre = nombre; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
}
@Entity: Marca esta clase como una entidad JPA, lo que significa que será persistida en una tabla de la base de datos. El nombre de la tabla por defecto será el mismo que el nombre de la clase (persona en minúsculas).
@Id: Indica que el atributo id es la clave primaria de la entidad. Cada fila tendrá un valor único en esta columna.
@GeneratedValue(strategy = GenerationType.IDENTITY): Especifica que el valor del campo id será generado automáticamente por la base de datos (usualmente como autoincremental). Existen otras estrategias (AUTO, SEQUENCE, TABLE), pero IDENTITY es simple y efectiva para bases H2 o MySQL.
Repositorio
📄 PersonaRepository.java
package com.ejemplo.demo.repositorio;
import com.ejemplo.demo.entidad.Persona;
import org.springframework.data.jpa.repository.JpaRepository;
public interface PersonaRepository extends JpaRepository<Persona, Long> {
}
JpaRepository<Persona, Long>: Es una interfaz de Spring Data que nos proporciona métodos CRUD listos para usar: findAll(), save(), deleteById(), etc.
Persona: el tipo de entidad
Long: el tipo de la clave primaria (id)
No se necesita ninguna anotación porque Spring escanea esta interfaz y genera una implementación automática.
Servicio
📄 PersonaService.java
@Service
public class PersonaService {
// ...
}
@Service: Marca esta clase como un componente de servicio, lo que permite que Spring la detecte y gestione como parte del contexto de la aplicación (inyección de dependencias, ciclo de vida, etc.).
Controlador
📄 PersonaController.java
@RestController
@RequestMapping("/personas")
public class PersonaController {
// ...
}
• @RestController: Marca la clase como un controlador REST. Es equivalente a usar @Controller + @ResponseBody para cada método.
• @RequestMapping("/personas"): Define la ruta base de la API. Todos los métodos se expondrán bajo /personas.
• @GetMapping, @PostMapping, @DeleteMapping: Indican qué método HTTP debe usarse para cada operación.
• @RequestBody: Indica que los datos del cuerpo del request (formato JSON) deben ser convertidos a un objeto Java.
• @PathVariable: Extrae una variable de la URL, por ejemplo /personas/1 extrae el id = 1.
Archivo application.properties
spring.datasource.url=jdbc:h2:mem:testdb
spring.jpa.hibernate.ddl-auto=update
spring.h2.console.enabled=true
spring.jpa.hibernate.ddl-auto=update: Le indica a JPA que genere automáticamente las tablas según nuestras entidades. Si la tabla no existe, la crea.