Husker du prosjektet fra den tredje modulen på frontend, der det var nødvendig å implementere et rpg-adminpanel for server-API? Hvis noen husker, ble et kart brukt som lagring på serveren. Naturligvis, i det virkelige liv, brukes ikke slike lagringer, men databaser brukes. Målet med dette prosjektet vil være å skrive en alternativ depotlagimplementering ved hjelp av Hibernate.

Til dette trenger du:

  1. Gaffel fra et depot
  2. Last ned din versjon av prosjektet til datamaskinen din.
  3. Legg til avhengigheter til pom.xml:
    • mysql:mysql-connector-java:8.0.30
    • org.hibernate: hibernate-core-jakarta: 5.6.11.Final
  4. Lag en maven build (mvn clean install). For en endring bruker vi Java versjon 1.8.
  5. Legg til lanseringskonfigurasjon via Idea. Implementeringen av dette elementet finner du i forelesningen https://codegym.cc/quests/lectures/cgu.module3.lecture02 (punkt 4). Den eneste forskjellen er et annet navn på artefakten. Hvis du gjorde alt riktig og startet applikasjonen, vil du se noe slikt:
  6. Kjør skriptet for opprettelse av rpg-skjema i Workbench:
    CREATE SCHEMA `rpg` ;
    
  7. Valgfritt . Hvis du vil se hvilken oppførsel som forventes, kan du endre com.game.service.PlayerServicemerknadsverdien fra "db" til "minne" i klassen i konstruktørparameteren . I dette tilfellet vil Spring bruke . Etter testen, ikke glem å endre merknadsverdien tilbake til "db" .@QualifierIPlayerRepositoryPlayerRepositoryMemory@Qualifier
  8. Ordne alle nødvendige merknader i enhetsklassen com.game.entity.Player. Tabellen skal hete "spiller", skjema "rpg". For enamer, bruk @Enumerated(EnumType.ORDINAL)i tillegg til merknaden @Column. La meg minne deg på at lengden på navnefeltet skal være opptil 12 tegn, tittelfeltet - opptil 30 tegn. Absolutt alle felt må ikke være null.
  9. PlayerRepositoryDBLegg til et privat siste felt i klassen SessionFactory sessionFactory, initialiser dette feltet i klassekonstruktøren. Bruk egenskaper som i vanlige oppgaver (vi vil jobbe med MySQL-databasen versjon 8). Fra interessant - legg til
    properties.put(Environment.HBM2DDL_AUTO, "update");
    
    Dette vil tillate deg å ikke lage en tabell manuelt (eller gjennom utførelse av et sql-skript).
  10. Implementer alle klassemetoder. For en forandring, la oss gjøre dette:
    • Implementer metoden getAllviaNativeQuery
    • Implementer metoden getAllCountviaNamedQuery
    • I metoden beforeStopkaller du y sessionFactory-metoden close. Ved å ha en merknad på metoden @PreDestroyvil Spring kalle denne metoden før den stopper applikasjonen, og dette vil tillate deg å frigi alle systemressurser gyldig.
    • Implementeringen av andre metoder er opp til deg. Men ikke glem transaksjoner og forpliktelser for metoder som på en eller annen måte endrer innholdet i databasen.
  11. Start applikasjonen. Hvis du gjorde alt riktig, vil du få en fungerende søknad. Men det er ingen data der, så kjør init.sql- skriptet (fra ressurser) gjennom Workbench slik at de vises. Trykk deretter F5 i nettleseren og kontroller at du har implementert alle metodene riktig.
  12. Det ville vært interessant å se nøyaktig hvilke spørringer Hibernate utfører, så la oss legge til spørringslogging. For å gjøre dette, legg til p6spy:p6spy:3.9.1- avhengigheten til pom.xml . I ressursmappen oppretter du en fil spy.properties , der spesifiserer:
    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
    
    Og i konstruktøren til PlayerRepositoryDB-klassen, endre to alternativer:
    properties.put(Environment.DRIVER, "com.p6spy.engine.spy.P6SpyDriver");
    properties.put(Environment.URL, "jdbc:p6spy:mysql://localhost:3306/rpg");
    
    Nå i serverutgangen for hver forespørsel vil du se 2 linjer. Den første er hvilken setning som er utarbeidet, den andre er spørringen med de innsatte parameterne.

Det er alt, prosjektet er klart, gratulerer!

Arbeid med Hibernate fra Spring bruker faktisk en annen tilnærming, som vi vil dekke i den femte modulen.


Prosjektanalyse.