Vă amintiți proiectul din al treilea modul de pe front-end, unde a fost necesar să implementați un panou de administrare rpg pentru API-ul serverului? Dacă cineva își amintește, o hartă a fost folosită ca stocare pe server. Desigur, în viața reală, astfel de stocări nu sunt folosite, ci se folosesc baze de date. Scopul acestui proiect va fi să scrie o implementare alternativă a stratului de depozit folosind Hibernate.

Pentru asta ai nevoie de:

  1. Furcă de la un depozit
  2. Descărcați versiunea dvs. a proiectului pe computer.
  3. Adăugați dependențe la pom.xml:
    • mysql:mysql-connector-java:8.0.30
    • org.hibernate: hibernate-core-jakarta: 5.6.11.Final
  4. Faceți o construcție Maven (instalare mvn clean). Pentru o schimbare, folosim Java versiunea 1.8.
  5. Adăugați configurația de lansare prin Idea. Implementarea acestui articol poate fi găsită în prelegerea https://codegym.cc/quests/lectures/cgu.module3.lecture02 (item 4). Singura diferență este un nume diferit pentru artefact. Dacă ați făcut totul bine și ați lansat aplicația, veți vedea ceva de genul acesta:
  6. Rulați scriptul de creare a schemei rpg în Workbench:
    CREATE SCHEMA `rpg` ;
    
  7. Opțional . Dacă doriți să vedeți ce comportament este așteptat, puteți modifica com.game.service.PlayerServicevaloarea adnotării de la „db” la „memory” în clasa din parametrul constructor . În acest caz, Spring va folosi . După test, nu uitați să schimbați valoarea adnotării înapoi la „db” .@QualifierIPlayerRepositoryPlayerRepositoryMemory@Qualifier
  8. Aranjați toate adnotările necesare în clasa de entitate com.game.entity.Player. Tabelul ar trebui să fie numit „player”, schema „rpg”. Pentru enams, utilizați @Enumerated(EnumType.ORDINAL)în plus față de adnotare @Column. Permiteți-mi să vă reamintesc că lungimea câmpului de nume ar trebui să fie de până la 12 caractere, câmpul de titlu - până la 30 de caractere. Absolut toate câmpurile nu trebuie să fie nule.
  9. PlayerRepositoryDBAdăugați un câmp final privat în clasă SessionFactory sessionFactory, inițializați acest câmp în constructorul clasei. Utilizați proprietăți ca în sarcinile normale (vom lucra cu baza de date MySQL versiunea 8). De la interesant - adaugă
    properties.put(Environment.HBM2DDL_AUTO, "update");
    
    Acest lucru vă va permite să nu creați un tabel manual (sau prin executarea unui script sql).
  10. Implementați toate metodele de clasă. Pentru o schimbare, hai să facem asta:
    • Implementați metoda getAllprinNativeQuery
    • Implementați metoda getAllCountprinNamedQuery
    • În metodă , apelați metoda beforeStopy . Având o adnotare pe metoda , Spring va apela această metodă înainte de a opri aplicația, iar acest lucru vă va permite să eliberați în mod valid toate resursele sistemului.sessionFactoryclose@PreDestroy
    • Implementarea altor metode depinde de tine. Dar nu uitați de tranzacții și commit-uri pentru metode care schimbă cumva conținutul bazei de date.
  11. Lansați aplicația. Dacă ați făcut totul corect, veți primi o aplicație funcțională. Dar nu există date acolo, așa că rulați scriptul init.sql (din resurse) prin Workbench, astfel încât acestea să apară. După aceea, apăsați F5 în browser și verificați dacă ați implementat corect toate metodele.
  12. Ar fi interesant să vedem exact ce interogări execută Hibernate, așa că haideți să adăugăm înregistrarea interogărilor. Pentru a face acest lucru, adăugați dependența p6spy:p6spy:3.9.1 la pom.xml . În folderul resurse, creați un fișier spy.properties , în care specificați:
    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
    
    Și în constructorul clasei PlayerRepositoryDB, modificați două opțiuni:
    properties.put(Environment.DRIVER, "com.p6spy.engine.spy.P6SpyDriver");
    properties.put(Environment.URL, "jdbc:p6spy:mysql://localhost:3306/rpg");
    
    Acum, în ieșirea serverului pentru fiecare cerere, veți vedea 2 rânduri. Prima este ce instrucțiune este pregătită, a doua este interogarea cu parametrii inserați.

Atât, proiectul este gata, felicitări!

De fapt, lucrul cu Hibernate de la Spring folosește o abordare diferită, pe care o vom acoperi în cel de-al cincilea modul.


Analiza proiectului.