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:

SubjectPredicate & Modifiers 

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

Made with Slides.com