Emlékszel a frontend harmadik moduljának projektjére, ahol egy rpg admin panelt kellett implementálni a szerver API-hoz? Ha valaki emlékszik, egy térképet használtak tárhelyként a szerveren. A való életben természetesen nem ilyen tárolókat használnak, hanem adatbázisokat használnak. A projekt célja egy alternatív tárolóréteg-megvalósítás megírása a Hibernate használatával.
Ehhez szüksége van:
- Fork egy adattárból
- Töltse le a projekt verzióját a számítógépére.
- Függőségek hozzáadása a pom.xml fájlhoz:
- mysql:mysql-connector-java:8.0.30
- org.hibernate: hibernate-core-jakarta: 5.6.11. Final
- Készíts egy maven buildet (mvn tiszta telepítés). A változtatás kedvéért a Java 1.8-as verzióját használjuk.
- Indítási konfiguráció hozzáadása az Idea segítségével. Ennek a tételnek a megvalósítása megtalálható a https://codegym.cc/quests/lectures/cgu.module3.lecture02 előadásban (4. tétel). Az egyetlen különbség a műtárgy más elnevezése. Ha mindent jól csinált, és elindította az alkalmazást, valami ilyesmit fog látni:
- Futtassa az rpg séma létrehozó parancsfájlt a Workbenchben:
CREATE SCHEMA `rpg` ;
- Választható . Ha látni szeretné, hogy milyen viselkedés várható, módosíthatja a
com.game.service.PlayerService
megjegyzés értékét „db” -ről „memory” értékre az osztályban a konstruktor paraméterben . Ebben az esetben a Spring a . A teszt után ne felejtse el visszaállítani a megjegyzés értékét "db" -re .@Qualifier
IPlayerRepository
PlayerRepositoryMemory
@Qualifier
- Rendezze el az összes szükséges megjegyzést az entitásosztályban
com.game.entity.Player
. A táblázat elnevezése "lejátszó", séma "rpg". Ennél@Enumerated(EnumType.ORDINAL)
a megjegyzés mellett használja a@Column
. Hadd emlékeztesselek arra, hogy a névmező hossza legfeljebb 12 karakter, a címmező legfeljebb 30 karakter lehet. Egyáltalán nem lehet nulla mező. PlayerRepositoryDB
Adjon hozzá egy privát végső mezőt az osztályhozSessionFactory sessionFactory
, inicializálja ezt a mezőt az osztálykonstruktorban. Használja a tulajdonságokat a normál feladatokhoz hasonlóan (a MySQL adatbázis 8-as verziójával fogunk dolgozni). Érdekes - add
Ez lehetővé teszi, hogy ne hozzon létre táblát kézzel (vagy egy sql szkript végrehajtásával).properties.put(Environment.HBM2DDL_AUTO, "update");
- Valamennyi osztálymetódus implementálása. A változatosság kedvéért tegyük ezt:
- Végezze el a módszert
getAll
keresztülNativeQuery
- Végezze el a módszert
getAllCount
keresztülNamedQuery
- A metódusban
beforeStop
hívja meg az ysessionFactory
metódustclose
. Ha van megjegyzés a metódushoz@PreDestroy
, a Spring meghívja ezt a metódust az alkalmazás leállítása előtt, és ez lehetővé teszi az összes rendszererőforrás érvényes felszabadítását. - A többi módszer megvalósítása Önön múlik. De ne feledkezzünk meg a tranzakciókról és a commit-okról sem olyan módszerek esetében, amelyek valamilyen módon megváltoztatják az adatbázis tartalmát.
- Indítsa el az alkalmazást. Ha mindent jól csináltál, kapsz egy működő alkalmazást. De ott nincsenek adatok, ezért futtassa az init.sql szkriptet (forrásokból) a Workbench-en keresztül, hogy megjelenjenek. Ezután nyomja meg az F5 billentyűt a böngészőben, és ellenőrizze, hogy az összes módszert megfelelően implementálta-e.
- Érdekes lenne látni, hogy a Hibernate pontosan milyen lekérdezéseket hajt végre, ezért adjunk hozzá lekérdezésnaplózást. Ehhez adja hozzá a p6spy:p6spy:3.9.1 függőséget a pom.xml fájlhoz . Az erőforrások mappában hozzon létre egy spy.properties fájlt , amelyben adja meg:
A PlayerRepositoryDB osztály konstruktorában módosítson két lehetőséget: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
Most minden kérés szerver kimenetében 2 sort fog látni. Az első az, hogy milyen utasítás készül, a második a lekérdezés a beillesztett paraméterekkel.properties.put(Environment.DRIVER, "com.p6spy.engine.spy.P6SpyDriver"); properties.put(Environment.URL, "jdbc:p6spy:mysql://localhost:3306/rpg");
Ez minden, a projekt kész, gratulálunk!
Valójában a tavaszi Hibernate-tel való munka más megközelítést alkalmaz, amelyet az ötödik modulban fogunk bemutatni.
Projektelemzés.
GO TO FULL VERSION