====== LU08b - Persistierung ======
Spring Boots nutzt ebenfalls Hibernate, liefert aber einige mächtige Funktionen.
==== JpaRepository ====
JpaRepository erleichtert es sehr, Objekte in oder aus der Datenbank zu laden.
^ Klassisch ^ JpaRepository ^
|
import jakarta.persistence.*;
import java.util.List;
public class PersonPersistor {
private EntityManagerFactory emf;
public PersonPersistor() {
this.emf = Persistence.createEntityManagerFactory("localPU");
}
public List findByLastName(String lastName) {
EntityManager em = emf.createEntityManager();
List result;
try {
em.getTransaction().begin();
TypedQuery query = em.createQuery(
"SELECT p FROM Person p WHERE p.lastName = :lastName", Person.class);
query.setParameter("lastName", lastName);
result = query.getResultList();
em.getTransaction().commit();
} catch (Exception e) {
em.getTransaction().rollback();
throw e;
} finally {
em.close();
}
return result;
}
public void close() {
emf.close();
}
}
|
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface PersonRepository extends JpaRepository { // Long ist der Datentyp des Primärschlüssels
List findByLastName(String lastName);
}
|
Massgebend ist hierbei die Benennung der Methode (und Argumente).
^ Schlüsselwort ^ Bedeutung ^
| ''findBy'' | SELECT ... WHERE |
| ''existsBy'' | prüft, ob mindestens ein Eintrag existiert |
| ''countBy'' | zählt Datensätze |
| ''deleteBy'' | löscht Datensätze |
| ''And'', ''Or'' | Verknüpfung mehrerer Bedingungen |
| ''LessThan'', ''GreaterThan'', ''Between'', ''Like'', ''Not'', ''In'' | Vergleichsoperatoren |
| ''OrderBy...Asc/Desc'' | Sortierung |
Folgende Methoden sind automatisch dabei, ohne dass sie implementiert werden müssen.
^ Methode ^ Beschreibung ^
| ''save(T entity)'' | Speichert oder aktualisiert eine Entität |
| ''findById(ID id)'' | Holt eine Entität per Primärschlüssel |
| ''existsById(ID id)'' | Prüft, ob eine Entität existiert |
| ''findAll()'' | Holt alle Entitäten |
| ''findAllById(Iterable ids)'' | Holt mehrere per ID |
| ''count()'' | Anzahl aller Entitäten |
| ''deleteById(ID id)'' | Löscht per Primärschlüssel |
| ''delete(T entity)'' | Löscht ein konkretes Objekt |
| ''deleteAll()'' | Löscht alle Einträge |
| ''flush()'' | Synchronisiert Änderungen mit der DB |
| ''saveAll(Iterable entities)'' | Mehrere Datensätze speichern |
Wobei der Typ ''ID'' den Datentyp akzeptiert, welcher beim Erben von ''JpaRepository'' angegeben wurde.