Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
de:modul:ffit:3-jahr:java:learningunits:lu08:b [2025/10/27 03:20] – angelegt apeterde:modul:ffit:3-jahr:java:learningunits:lu08:b [2025/10/28 01:35] (aktuell) apeter
Zeile 1: Zeile 1:
-====== LU08b - Schnittstellendokumentation ======+====== LU08b - Persistierung ======
  
-Da in grösseren Entwicklungsteams oft unterschiedliche Leute an Front- und Backend arbeitenist eine entsprechende Dokumentation der Schnittstellen (z. B. REST APIs) unabdingbar. +Spring Boots nutzt ebenfalls Hibernateliefert aber einige mächtige Funktionen
-Dadurch wird sichergestellt, dass die Schnittstellen seitens Backend korrekt implementiert und seitens Frontend korrekt verwendet werden.+
  
 +==== JpaRepository ==== 
  
-==== OpenAPI ====  +JpaRepository erleichtert es sehrObjekte in oder aus der Datenbank zu laden.
-OpenAPI (https://www.openapis.org/) ist ein gebräuchlicher Standardum APIs in einer JSON- oder YAML-Datei zu spezifizieren+
  
-Machen Sie im Accounting-App-Projekt einen cherry-pick auf ''TODO'' um im Verzeichnis ''documentation/'' die Datei ''openapi.yaml'' zu erhalten.+^ Klassisch ^ JpaRepository ^ 
 +| <WRAP> 
 +<code java> 
 +import jakarta.persistence.*; 
 +import java.util.List;
  
-==== Swagger ==== +public class PersonPersistor {
-Swagger (https://swagger.io/) umfasst einige Tools rund um OpenAPI. +
-Beispiele:+
  
-^ Name ^ Verwendungszweck ^ +    private EntityManagerFactory emf;
-| Swagger Editor | Bearbeiten/Validieren von OpenAPI-Dateien |  +
-| Swagger UI | Interaktive API-Dokumentation im Browser |  +
-| Swagger Codegen / OpenAPI Generator | Generieren von  Client- oder Server-Code aus OpenAPI-Dateien | +
  
-Nutzen Sie den Swagger Editor (https://editor.swagger.io/um die definierten APIs in ''openapi.yaml'' anzusehen und zu verstehen.+    public PersonPersistor() 
 +        this.emf = Persistence.createEntityManagerFactory("localPU"); 
 +    }
  
-Theoretisch könnten Sie auch das Swagger-UI (https://swagger.io/tools/swagger-ui/benutzen, dieses müssten Sie aber erst herunterladen.+    public List<Person> findByLastName(String lastName
 +        EntityManager em = emf.createEntityManager(); 
 +        List<Person> result;
  
-Builden Sie Ihr Projekt neuFalls Sie dafür die IDE benutzen, müssen Sie sicherstellen, dass die IDE die Gradle-Tasks korrekt ausführt+        try { 
- +            em.getTransaction().begin(); 
-Der neue Task ''openApiGenerate'' in der Datei ''build.gradle'' erstellt nun automatisch bei jedem Build die entsprechenden Interfaces für die APIs+            TypedQuery<Person> query = em.createQuery( 
- +                    "SELECT p FROM Person p WHERE p.lastName = :lastName", Person.class); 
-  - Prüfen Sieob in ''build/generated/openapi/src/main/java/ch/bzz/generated/api/'' und in ''build/generated/openapi/src/main/java/ch/bzz/generated/model/'' korrekterweise Klassen erstellt wurden+            query.setParameter("lastName"lastName); 
-  - Fügen Sie unter ''src/main/java/ch/bzz/controller'' die Klassen ''AccountApiController.java'', ''BookingApiController.java'' und ''ProjectApiController.java'' hinzu und lassen Sie die Klassen die entprechenden Interfaces implementieren.+            result = query.getResultList(); 
 +            em.getTransaction().commit(); 
 +        } catch (Exception e) { 
 +            em.getTransaction().rollback(); 
 +            throw e; 
 +        } finally { 
 +            em.close(); 
 +        } 
 +        return result; 
 +    }
  
 +    public void close() {
 +        emf.close();
 +    }
 +}
 +</code> 
 +</WRAP> | <WRAP>
 <code java> <code java>
-@RestController +import org.springframework.data.jpa.repository.JpaRepository; 
-public class ProjectApiController implements ProjectApi +import java.util.List; 
-    ....+ 
 +public interface PersonRepository extends JpaRepository<Person, Long> // Long ist der Datentyp des Primärschlüssels 
 +    List<Person> findByLastName(String lastName);
 } }
 </code> </code>
 +</WRAP> |
 +
 +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.
  
-Man kann auch mit der OpenAPI-Datei und Postman die APIs testen.+^ 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<ID> 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<T> entities)'' | Mehrere Datensätze speichern             |
  
 +Wobei der Typ ''ID'' den Datentyp akzeptiert, welcher beim Erben von ''JpaRepository'' angegeben wurde.
  
  • de/modul/ffit/3-jahr/java/learningunits/lu08/b.1761531627.txt.gz
  • Zuletzt geändert: 2025/10/27 03:20
  • von apeter