Tandaan ang proyekto mula sa ikatlong module sa frontend, kung saan kinakailangan na ipatupad ang isang rpg admin panel para sa server API? Kung may nakakaalala, isang mapa ang ginamit bilang imbakan sa server. Naturally, sa totoong buhay, ang mga naturang storage ay hindi ginagamit, ngunit ang mga database ay ginagamit. Ang layunin ng proyektong ito ay magsulat ng alternatibong pagpapatupad ng layer ng repositoryo gamit ang Hibernate.

Para dito kailangan mo:

  1. Fork mula sa isang repositoryo
  2. I-download ang iyong bersyon ng proyekto sa iyong computer.
  3. Magdagdag ng mga dependency sa pom.xml:
    • mysql:mysql-connector-java:8.0.30
    • org.hibernate: hibernate-core-jakarta: 5.6.11.Final
  4. Gumawa ng maven build (mvn clean install). Para sa isang pagbabago, ginagamit namin ang bersyon ng Java 1.8.
  5. Magdagdag ng configuration ng paglunsad sa pamamagitan ng Idea. Ang pagpapatupad ng item na ito ay matatagpuan sa lecture https://codegym.cc/quests/lectures/cgu.module3.lecture02 (item 4). Ang pagkakaiba lang ay ibang pangalan para sa artifact. Kung ginawa mo ang lahat ng tama at inilunsad ang application, makakakita ka ng ganito:
  6. Patakbuhin ang script ng paglikha ng rpg schema sa Workbench:
    CREATE SCHEMA `rpg` ;
    
  7. Opsyonal . Kung gusto mong makita kung anong pag-uugali ang inaasahan, maaari mong baguhin com.game.service.PlayerServiceang halaga ng anotasyon mula sa "db" patungo sa "memorya" sa klase sa parameter ng constructor . Sa kasong ito, gagamitin ng Spring ang . Pagkatapos ng pagsubok, huwag kalimutang palitan ang halaga ng anotasyon pabalik sa "db" .@QualifierIPlayerRepositoryPlayerRepositoryMemory@Qualifier
  8. Ayusin ang lahat ng kinakailangang anotasyon sa klase ng entity com.game.entity.Player. Ang talahanayan ay dapat na pinangalanang "manlalaro", schema "rpg". Para sa mga enam, gamitin @Enumerated(EnumType.ORDINAL)bilang karagdagan sa anotasyon @Column. Ipaalala ko sa iyo na ang haba ng field ng pangalan ay dapat hanggang sa 12 character, ang field ng pamagat - hanggang 30 character. Ganap na lahat ng mga patlang ay hindi dapat null.
  9. PlayerRepositoryDBMagdagdag ng pribadong final field sa class SessionFactory sessionFactory, simulan ang field na ito sa class constructor. Gumamit ng mga pag-aari tulad ng sa mga normal na gawain (magtatrabaho kami sa bersyon 8 ng MySQL database). Mula sa kawili-wili - idagdag
    properties.put(Environment.HBM2DDL_AUTO, "update");
    
    Ito ay magbibigay-daan sa iyo na huwag lumikha ng isang talahanayan nang manu-mano (o sa pamamagitan ng pagpapatupad ng isang sql script).
  10. Ipatupad ang lahat ng mga pamamaraan ng klase. Para sa pagbabago, gawin natin ito:
    • Ipatupad ang pamamaraan getAllsa pamamagitan ngNativeQuery
    • Ipatupad ang pamamaraan getAllCountsa pamamagitan ngNamedQuery
    • Sa pamamaraan beforeStop, tawagan ang sessionFactoryparaan ng y close. Sa pamamagitan ng pagkakaroon ng anotasyon sa pamamaraan @PreDestroy, tatawagin ng Spring ang paraang ito bago ihinto ang application, at magbibigay-daan ito sa iyong wastong ilabas ang lahat ng mapagkukunan ng system.
    • Ang pagpapatupad ng iba pang mga pamamaraan ay nasa iyo. Ngunit huwag kalimutan ang tungkol sa mga transaksyon at commit para sa mga pamamaraan na kahit papaano ay nagbabago sa mga nilalaman ng database.
  11. Ilunsad ang application. Kung ginawa mo ang lahat ng tama, makakakuha ka ng isang gumaganang aplikasyon. Ngunit walang data doon, kaya patakbuhin ang init.sql script (mula sa mga mapagkukunan) sa pamamagitan ng Workbench upang lumitaw ang mga ito. Pagkatapos nito, pindutin ang F5 sa browser at suriin kung naipatupad mo nang tama ang lahat ng mga pamamaraan.
  12. Magiging kawili-wiling makita kung ano mismo ang mga query na isinasagawa ng Hibernate, kaya magdagdag tayo ng query logging. Upang gawin ito, idagdag ang p6spy:p6spy:3.9.1 dependency sa pom.xml . Sa folder ng mga mapagkukunan, lumikha ng isang file spy.properties , kung saan tinukoy ang:
    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
    
    At sa constructor ng klase ng PlayerRepositoryDB, baguhin ang dalawang opsyon:
    properties.put(Environment.DRIVER, "com.p6spy.engine.spy.P6SpyDriver");
    properties.put(Environment.URL, "jdbc:p6spy:mysql://localhost:3306/rpg");
    
    Ngayon sa output ng server para sa bawat kahilingan makakakita ka ng 2 linya. Ang una ay kung anong pahayag ang inihanda, ang pangalawa ay ang query na may nakapasok na mga parameter.

Iyon lang, handa na ang proyekto, congratulations!

Sa katunayan, ang pagtatrabaho sa Hibernate mula sa Spring ay gumagamit ng ibang diskarte, na tatalakayin natin sa ikalimang module.


Pagsusuri ng proyekto.