Ricordi il progetto del terzo modulo sul frontend, dove era necessario implementare un pannello di amministrazione rpg per l'API del server? Se qualcuno ricorda, una mappa è stata utilizzata come archivio sul server. Naturalmente, nella vita reale, tali archivi non vengono utilizzati, ma vengono utilizzati i database. L'obiettivo di questo progetto sarà scrivere un'implementazione alternativa del livello di repository utilizzando Hibernate.

Per questo hai bisogno di:

  1. Fork da un repository
  2. Scarica la tua versione del progetto sul tuo computer.
  3. Aggiungi dipendenze a pom.xml:
    • mysql:mysql-connettore-java:8.0.30
    • org.hibernate: hibernate-core-jakarta: 5.6.11.Final
  4. Crea una build maven (mvn clean install). Per cambiare, usiamo Java versione 1.8.
  5. Aggiungi la configurazione di avvio tramite Idea. L'implementazione di questo item può essere trovata nella lezione https://codegym.cc/quests/lectures/cgu.module3.lecture02 (item 4). L'unica differenza è un nome diverso per l'artefatto. Se hai fatto tutto bene e hai avviato l'applicazione, vedrai qualcosa del genere:
  6. Esegui lo script di creazione dello schema rpg in Workbench:
    CREATE SCHEMA `rpg` ;
    
  7. Facoltativo . Se vuoi vedere quale comportamento è previsto, puoi modificare com.game.service.PlayerServiceil valore dell'annotazione da "db" a "memory" nella classe nel parametro del costruttore . In questo caso, Spring utilizzerà l'estensione . Dopo il test, non dimenticare di modificare nuovamente il valore dell'annotazione in "db" .@QualifierIPlayerRepositoryPlayerRepositoryMemory@Qualifier
  8. Disporre tutte le annotazioni necessarie nella classe di entità com.game.entity.Player. La tabella dovrebbe essere chiamata "player", schema "rpg". Per enams, utilizzare @Enumerated(EnumType.ORDINAL)in aggiunta all'annotazione @Column. Lascia che ti ricordi che la lunghezza del campo del nome dovrebbe essere fino a 12 caratteri, il campo del titolo - fino a 30 caratteri. Assolutamente tutti i campi non devono essere nulli.
  9. PlayerRepositoryDBAggiungi un campo finale privato nella classe SessionFactory sessionFactory, inizializza questo campo nel costruttore della classe. Usa le proprietà come nelle normali attività (lavoreremo con il database MySQL versione 8). Da interessante - aggiungi
    properties.put(Environment.HBM2DDL_AUTO, "update");
    
    Ciò consentirà di non creare una tabella manualmente (o tramite l'esecuzione di uno script sql).
  10. Implementa tutti i metodi di classe. Tanto per cambiare, facciamo così:
    • Implementare il metodo getAlltramiteNativeQuery
    • Implementare il metodo getAllCounttramiteNamedQuery
    • Nel metodo beforeStop, chiamare il sessionFactorymetodo y close. Avendo un'annotazione sul metodo @PreDestroy, Spring chiamerà questo metodo prima di fermare l'applicazione, e questo ti permetterà di rilasciare validamente tutte le risorse di sistema.
    • L'implementazione di altri metodi dipende da te. Ma non dimenticare transazioni e commit per metodi che in qualche modo modificano il contenuto del database.
  11. Avvia l'applicazione. Se hai fatto tutto bene, otterrai un'applicazione funzionante. Ma non ci sono dati lì, quindi esegui lo script init.sql (dalle risorse) tramite Workbench in modo che appaiano. Successivamente, premi F5 nel browser e verifica di aver implementato correttamente tutti i metodi.
  12. Sarebbe interessante vedere esattamente quali query esegue Hibernate, quindi aggiungiamo il log delle query. Per fare ciò, aggiungi la dipendenza p6spy:p6spy:3.9.1 a pom.xml . Nella cartella delle risorse, creare un file spy.properties , in cui specificare:
    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
    
    E nel costruttore della classe PlayerRepositoryDB, cambia due opzioni:
    properties.put(Environment.DRIVER, "com.p6spy.engine.spy.P6SpyDriver");
    properties.put(Environment.URL, "jdbc:p6spy:mysql://localhost:3306/rpg");
    
    Ora nell'output del server per ogni richiesta vedrai 2 righe. La prima è quale istruzione viene preparata, la seconda è la query con i parametri inseriti.

Questo è tutto, il progetto è pronto, congratulazioni!

In effetti, lavorare con Hibernate da Spring utilizza un approccio diverso, che tratteremo nel quinto modulo.


Analisi del progetto.