CS2031:
Desarrollo Basado en Plataformas
Semana 04: API con Spring Boot
Contenido
- Java Persistence API (I): Repository, Identifiers, Query Methods
- Java Persistence API (II): Relations
- Lab 02.01: Desarrollo de un API con Spring Boot y BBDD
Java Persistence API (JPA)
Es un API que nos permite realizar la gestión de datos y persistencia
a través de repositorios.
Repository
public interface CrudRepository<T, ID> extends Repository<T, ID> {
<S extends T> S save(S entity);
Optional<T> findById(ID primaryKey);
Iterable<T> findAll();
long count();
void delete(T entity);
boolean existsById(ID primaryKey);
// … more functionality omitted.
}
@Id y @GeneratedValue
Necesitamos utilizar un identificador para cada entidad. Utilizando @Id podemos señalar el ID de nuestra entidad.
@SequenceGenerator(
name="EmployeeSeq",
sequenceName = "EMPLOYEES_SEQ",
initialValue = 1,
allocationSize = 10
)
// @Entity class XYZ {}
@Id
@GeneratedValue(
strategy = GenerationType.SEQUENCE,
generator = "EmployeeSeq")
private Long id;
@Id
@GeneratedValue(
strategy = GenerationType.AUTO)
private Long id;
Autogeneración
Sequence
Query Methods
¿Cómo hago queries específicas de mis atributos?
Ejemplo:
¿Cómo busco todas mis canciones por el nombre de un artista?
Query Methods
class Song {
Long id;
String title;
String artist;
// More attributes & methods
}
interface SongRepository extends Repository<Song, Long> {
List<Song> findByArtist(String artist);
}
Query Methods Keywords:
Generar consultas mediante
el nombre de los métodos (camelCase).
Ejercicio
¿Cómo obtengo todas mis canciones que son de cierto género pero no de cierto artista?
Java Persistence API (JPA) II: Relations
@OneToOne
Se emplea para definir una relación uno a uno entre dos entidades.
Ejemplo: Persona y Pasaporte
@OneToOne
@Entity
@Table(name = "personas")
public class Persona {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nombre;
@OneToOne(mappedBy = "persona", cascade = CascadeType.ALL)
private Pasaporte pasaporte;
// constructors, getters y setters
}
@Entity
@Table(name = "pasaportes")
public class Pasaporte {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String numero;
@OneToOne
@JoinColumn(name = "persona_id")
private Persona persona;
// constructors, getters y setters
}
@OneToMany
Se emplea para definir una relación uno a muchos entre dos entidades.
Ejemplo: Autor y Libro, para indicar que un autor puede tener múltiples libros, pero un libro está asociado a un solo autor.
@ManyToOne
Esta anotación se utiliza en el lado opuesto de @OneToMany. Define una relación de muchos a uno entre dos entidades.
Ejemplo: Autor y Libro, para indicar que un libro pertenece a un solo autor.
@ManyToMany
Se emplea para definir una relación muchos a muchos entre dos entidades. Se podría usar @ManyToOne en la entidad "Libro" para indicar que un libro pertenece a un solo autor.
Ejemplo: Estudiante y Curso
Lab 02.01: API con Spring Boot + Postgres + Docker
References
Desarrollo Basado en Plataformas - ORM II
By Jorge Rios
Desarrollo Basado en Plataformas - ORM II
- 110