Herinner je je het project nog van de derde module op de frontend, waar het nodig was om een ​​rpg-beheerderspaneel voor de server-API te implementeren? Als iemand het zich herinnert, werd een kaart gebruikt als opslag op de server. Uiteraard worden dergelijke opslagplaatsen in het echte leven niet gebruikt, maar worden databases gebruikt. Het doel van dit project is het schrijven van een alternatieve repository-laagimplementatie met behulp van Hibernate.

Hiervoor heb je nodig:

  1. Fork uit een repository
  2. Download uw versie van het project naar uw computer.
  3. Voeg afhankelijkheden toe aan pom.xml:
    • mysql:mysql-connector-java:8.0.30
    • org.hibernate: hibernate-core-jakarta: 5.6.11.Final
  4. Maak een maven-build (mvn schone installatie). Voor de verandering gebruiken we Java versie 1.8.
  5. Startconfiguratie toevoegen via Idea. De uitwerking van dit item is te vinden in de lezing https://codegym.cc/quests/lectures/cgu.module3.lecture02 (item 4). Het enige verschil is een andere naam voor het artefact. Als je alles goed hebt gedaan en de applicatie hebt gestart, zie je zoiets als dit:
  6. Voer het script voor het maken van het rpg-schema uit in Workbench:
    CREATE SCHEMA `rpg` ;
    
  7. Optioneel . Als u wilt zien welk gedrag wordt verwacht, kunt u com.game.service.PlayerServicede annotatiewaarde @Qualifierwijzigen van "db" in "memory" in de klasse in de constructorparameter . In dit geval gebruikt Spring IPlayerRepositoryde PlayerRepositoryMemory. Vergeet na de test niet de annotatiewaarde @Qualifierterug te zetten naar "db" .
  8. Rangschik alle noodzakelijke annotaties in de entiteitsklasse com.game.entity.Player. De tabel moet "speler" heten, schema "rpg". Gebruik voor enams @Enumerated(EnumType.ORDINAL)naast de annotatie @Column. Laat me u eraan herinneren dat de lengte van het naamveld maximaal 12 tekens moet zijn, het titelveld - maximaal 30 tekens. Absoluut alle velden mogen niet null zijn.
  9. PlayerRepositoryDBVoeg een privé laatste veld toe in de class SessionFactory sessionFactory, initialiseer dit veld in de class constructor. Gebruik eigenschappen zoals bij normale taken (we zullen werken met de MySQL-database versie 8). Van interessant - toevoegen
    properties.put(Environment.HBM2DDL_AUTO, "update");
    
    Hierdoor kunt u niet handmatig een tabel maken (of door het uitvoeren van een sql-script).
  10. Implementeer alle klassenmethoden. Laten we voor de verandering dit doen:
    • Implementeer de methode getAllviaNativeQuery
    • Implementeer de methode getAllCountviaNamedQuery
    • Roep in de methode de methode beforeStopy aan . Door een annotatie op de methode te hebben , zal Spring deze methode aanroepen voordat de toepassing wordt gestopt, en dit stelt u in staat om geldig alle systeembronnen vrij te geven.sessionFactoryclose@PreDestroy
    • De implementatie van andere methoden is aan jou. Maar vergeet transacties en commits niet voor methoden die op de een of andere manier de inhoud van de database veranderen.
  11. Start de applicatie. Als je alles goed hebt gedaan, krijg je een werkende applicatie. Maar er zijn daar geen gegevens, dus voer het init.sql- script (van bronnen) door de Workbench zodat ze verschijnen. Druk daarna op F5 in de browser en controleer of u alle methoden correct hebt geïmplementeerd.
  12. Het zou interessant zijn om precies te zien welke query's Hibernate uitvoert, dus laten we query-logging toevoegen. Om dit te doen, voegt u de afhankelijkheid p6spy:p6spy:3.9.1 toe aan pom.xml . Maak in de bronnenmap een bestand spy.properties , waarin u opgeeft:
    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
    
    En verander in de constructor van de klasse PlayerRepositoryDB twee opties:
    properties.put(Environment.DRIVER, "com.p6spy.engine.spy.P6SpyDriver");
    properties.put(Environment.URL, "jdbc:p6spy:mysql://localhost:3306/rpg");
    
    Nu ziet u in de serveruitvoer voor elk verzoek 2 regels. De eerste is welke verklaring wordt opgesteld, de tweede is de query met de ingevoegde parameters.

Dat is alles, het project is klaar, gefeliciteerd!

Het werken met Hibernate from Spring gebruikt in feite een andere aanpak, die we in de vijfde module zullen behandelen.


Project analyse.