Kommer du ihåg projektet från den tredje modulen på frontend, där det var nödvändigt att implementera en rpg-adminpanel för serverns API? Om någon kommer ihåg användes en karta som lagring på servern. Naturligtvis, i verkliga livet, används inte sådana lagringar, men databaser används. Målet med detta projekt kommer att vara att skriva en alternativ förvarslagerimplementering med Hibernate.

För detta behöver du:

  1. Gaffel från ett förråd
  2. Ladda ner din version av projektet till din dator.
  3. Lägg till beroenden till pom.xml:
    • mysql:mysql-connector-java:8.0.30
    • org.hibernate: hibernate-core-jakarta: 5.6.11.Final
  4. Gör ett mavenbygge (mvn clean install). För en förändring använder vi Java version 1.8.
  5. Lägg till startkonfiguration via Idé. Implementeringen av detta objekt finns i föreläsningen https://codegym.cc/quests/lectures/cgu.module3.lecture02 (punkt 4). Den enda skillnaden är ett annat namn på artefakten. Om du gjorde allt rätt och startade programmet kommer du att se något så här:
  6. Kör skriptet för att skapa rpg-schema i Workbench:
    CREATE SCHEMA `rpg` ;
    
  7. Valfritt . Om du vill se vilket beteende som förväntas kan du ändra com.game.service.PlayerServiceannoteringsvärdet från "db" till "minne" i klassen i konstruktorparametern . I det här fallet kommer Spring att använda . Efter testet, glöm inte att ändra anteckningsvärdet tillbaka till "db" .@QualifierIPlayerRepositoryPlayerRepositoryMemory@Qualifier
  8. Ordna alla nödvändiga anteckningar i entitetsklassen com.game.entity.Player. Tabellen ska heta "spelare", schema "rpg". För enamer, använd @Enumerated(EnumType.ORDINAL)utöver annoteringen @Column. Låt mig påminna dig om att längden på namnfältet bör vara upp till 12 tecken, titelfältet - upp till 30 tecken. Absolut alla fält får inte vara null.
  9. PlayerRepositoryDBLägg till ett privat slutfält i klassen SessionFactory sessionFactory, initiera detta fält i klasskonstruktorn. Använd egenskaper som i vanliga uppgifter (vi kommer att arbeta med MySQL-databasen version 8). Från intressant - lägg till
    properties.put(Environment.HBM2DDL_AUTO, "update");
    
    Detta gör att du inte kan skapa en tabell manuellt (eller genom att köra ett sql-skript).
  10. Implementera alla klassmetoder. För en förändring, låt oss göra så här:
    • Implementera metoden getAllviaNativeQuery
    • Implementera metoden getAllCountviaNamedQuery
    • I metoden beforeStop, anrop y sessionFactory-metoden close. Genom att ha en anteckning på metoden @PreDestroykommer Spring att anropa den här metoden innan programmet stoppas, vilket gör att du kan frigöra alla systemresurser på ett giltigt sätt.
    • Implementeringen av andra metoder är upp till dig. Men glöm inte transaktioner och åtaganden för metoder som på något sätt ändrar innehållet i databasen.
  11. Starta applikationen. Om du gjorde allt rätt får du en fungerande applikation. Men det finns inga data där, så kör init.sql- skriptet (från resurser) genom Workbench så att de visas. Därefter trycker du på F5 i webbläsaren och kontrollerar att du har implementerat alla metoder korrekt.
  12. Det skulle vara intressant att se exakt vilka frågor Hibernate kör, så låt oss lägga till frågeloggning. För att göra detta, lägg till p6spy:p6spy:3.9.1 beroendet till pom.xml . Skapa filen spy.properties i resursmappen där du anger:
    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
    
    Och i konstruktören av klassen PlayerRepositoryDB, ändra två alternativ:
    properties.put(Environment.DRIVER, "com.p6spy.engine.spy.P6SpyDriver");
    properties.put(Environment.URL, "jdbc:p6spy:mysql://localhost:3306/rpg");
    
    Nu kommer du att se 2 rader i serverutgången för varje begäran. Den första är vilken sats som förbereds, den andra är frågan med de infogade parametrarna.

Det var allt, projektet är klart, grattis!

Faktum är att arbetet med Hibernate från Spring använder ett annat tillvägagångssätt, vilket vi kommer att ta upp i den femte modulen.


Projektanalys.