Erinnern Sie sich an das Projekt aus dem dritten Modul im Frontend, bei dem es notwendig war, ein RPG-Admin-Panel für die Server-API zu implementieren? Falls sich jemand erinnert, wurde eine Karte als Speicher auf dem Server verwendet. Im wirklichen Leben werden solche Speicher natürlich nicht verwendet, sondern Datenbanken. Das Ziel dieses Projekts wird es sein, eine alternative Repository-Layer-Implementierung mit Hibernate zu schreiben.

Dafür benötigen Sie:

  1. Fork aus einem Repository
  2. Laden Sie Ihre Version des Projekts auf Ihren Computer herunter.
  3. Abhängigkeiten zu pom.xml hinzufügen:
    • mysql:mysql-connector-java:8.0.30
    • org.hibernate: hibernate-core-jakarta: 5.6.11.Final
  4. Erstellen Sie einen Maven-Build (MVN-Neuinstallation). Zur Abwechslung nutzen wir Java Version 1.8.
  5. Fügen Sie die Startkonfiguration über Idea hinzu. Die Umsetzung dieses Punktes finden Sie in der Vorlesung https://codegym.cc/quests/lectures/cgu.module3.lecture02 (Punkt 4). Der einzige Unterschied besteht in einem anderen Namen für das Artefakt. Wenn Sie alles richtig gemacht und die Anwendung gestartet haben, sehen Sie etwa Folgendes:
  6. Führen Sie das RPG-Schema-Erstellungsskript in Workbench aus:
    CREATE SCHEMA `rpg` ;
    
  7. Optional . Wenn Sie sehen möchten, welches Verhalten erwartet wird, können Sie com.game.service.PlayerServiceden Annotationswert in der Klasse im Konstruktorparameter von „db“ in „memory“@Qualifier ändern . In diesem Fall verwendet Spring die . Vergessen Sie nach dem Test nicht, den Annotationswert wieder auf „db“ zu ändern .IPlayerRepositoryPlayerRepositoryMemory@Qualifier
  8. Ordnen Sie alle erforderlichen Anmerkungen in der Entitätsklasse an com.game.entity.Player. Die Tabelle sollte „player“ heißen, Schema „rpg“. Für Enams @Enumerated(EnumType.ORDINAL)zusätzlich zur Annotation verwenden @Column. Ich möchte Sie daran erinnern, dass die Länge des Namensfelds bis zu 12 Zeichen und des Titelfelds bis zu 30 Zeichen betragen sollte. Absolut alle Felder dürfen nicht null sein.
  9. PlayerRepositoryDBFügen Sie der Klasse ein privates Endfeld hinzu SessionFactory sessionFactoryund initialisieren Sie dieses Feld im Klassenkonstruktor. Verwenden Sie Eigenschaften wie bei normalen Aufgaben (wir arbeiten mit der MySQL-Datenbank Version 8). Von interessant - hinzufügen
    properties.put(Environment.HBM2DDL_AUTO, "update");
    
    Dadurch müssen Sie eine Tabelle nicht manuell (oder durch die Ausführung eines SQL-Skripts) erstellen.
  10. Implementieren Sie alle Klassenmethoden. Zur Abwechslung machen wir Folgendes:
    • Implementieren Sie die Methode getAllüberNativeQuery
    • Implementieren Sie die Methode getAllCountüberNamedQuery
    • Rufen Sie in der Methode beforeStopdie y- sessionFactoryMethode auf close. Durch eine Anmerkung zur Methode @PreDestroyruft Spring diese Methode auf, bevor die Anwendung gestoppt wird. Dadurch können Sie alle Systemressourcen gültig freigeben.
    • Die Implementierung anderer Methoden bleibt Ihnen überlassen. Aber vergessen Sie nicht die Transaktionen und Commits für Methoden, die den Inhalt der Datenbank irgendwie verändern.
  11. Anwendung starten. Wenn Sie alles richtig gemacht haben, erhalten Sie eine funktionierende Bewerbung. Da dort jedoch keine Daten vorhanden sind, führen Sie das Skript init.sql (aus Ressourcen) über die Workbench aus, damit diese angezeigt werden. Drücken Sie anschließend im Browser F5 und prüfen Sie, ob Sie alle Methoden korrekt implementiert haben.
  12. Es wäre interessant zu sehen, welche Abfragen genau Hibernate ausführt. Fügen wir also die Abfrageprotokollierung hinzu. Fügen Sie dazu die Abhängigkeit p6spy:p6spy:3.9.1 zu pom.xml hinzu . Erstellen Sie im Ressourcenordner eine Datei spy.properties , in der Sie Folgendes angeben:
    driverlist=com.mysql.cj.jdbc.Driver
    dateformat=yyyy-MM-dd hh:mm:ss a
    appender=com.p6spy.engine.spy.appender.StdoutLogger
    logMessageFormat=com.p6spy.engine.spy.appender.MultiLineFormat
    
    Und ändern Sie im Konstruktor der PlayerRepositoryDB-Klasse zwei Optionen:
    properties.put(Environment.DRIVER, "com.p6spy.engine.spy.P6SpyDriver");
    properties.put(Environment.URL, "jdbc:p6spy:mysql://localhost:3306/rpg");
    
    Jetzt sehen Sie in der Serverausgabe für jede Anfrage zwei Zeilen. Das erste ist, welche Anweisung vorbereitet wird, das zweite ist die Abfrage mit den eingefügten Parametern.

Das ist alles, das Projekt ist fertig, Glückwunsch!

Tatsächlich verwendet die Arbeit mit Hibernate from Spring einen anderen Ansatz, den wir im fünften Modul behandeln werden.


Projektanalyse.