JavaRush /Kurslar /All lectures for AZ purposes /Mövzu üzrə Proyekt: Hibernate #1

Mövzu üzrə Proyekt: Hibernate #1

All lectures for AZ purposes
Səviyyə , Dərs
Mövcuddur

Üçüncü moduldan frontend proyektini xatırlayırsınızmı, burada server API üçün RPG üçün admin panelini həyata keçirməli idik? Xatırlayan varsa - serverdə saxlama olaraq xəritə istifadə olunurdu. Əlbəttə ki, real həyatda belə saxlama yerlərindən istifadə edilmir, əvəzinə verilənlər bazasından istifadə edilir. Bu proyektin məqsədi Hibernate istifadə edərək repository qatını alternativ olaraq həyata keçirmək olacaq.

Bunun üçün lazımdır:

  1. Repozitoriyadan fork edin
  2. Layihənin öz versiyasını kompüterə yükləyin.
  3. pom.xml-ə asılılıqları əlavə edin:
    • mysql: mysql-connector-java: 8.0.30
    • org.hibernate: hibernate-core-jakarta: 5.6.11.Final
  4. Maven build edin (mvn clean install). Müxtəliflik üçün Java versiyası 1.8 istifadə edəcəyik.
  5. İdeya vasitəsilə işə salma konfiqurasiyasını əlavə edin. Bu addımın həyata keçirilməsini dərsdə burada görə bilərsiniz https://javarush.com/quests/lectures/jru.module3.lecture02 (addım 4). Tək fərq - fərqli artefakt adı. Hər şeyi düzgün edib tətbiqi işə salırsınızsa, təxmini belə bir görüntü ilə qarşılaşacaqsınız:
  6. Workbench-də RPG sxemini yaratmaq üçün skripti icra edin:
    CREATE SCHEMA `rpg` ;
    
  7. Opsional. Gözlənilən davranışı görmək istəyirsinizsə, com.game.service.PlayerService sinifində @Qualifier annotasiyasının dəyərini "db" əvəzinə "memory" olaraq dəyişə bilərsiniz. Bu halda, Spring IPlayerRepository interfeysini həyata keçirmək üçün PlayerRepositoryMemory sinifini istifadə edəcək. Testdən sonra annotasiya @Qualifier dəyərini yenidən "db" olaraq dəyişməyi unutmayın.
  8. com.game.entity.Player eniti sinifində bütün zəruri annotasiyaları yerləşdirin. Cədvəl "player", sxem isə "rpg" adlanmalıdır. Enumlar üçün @Enumerated(EnumType.ORDINAL) istifadə edin, @Column annotasiyasını da əlavə edin. Xatırladım ki, name sahəsinin uzunluğu 12 simvola qədər, title sahəsi isə 30 simvola qədər olmalıdır. Bütün sahələr null olmamalıdır.
  9. PlayerRepositoryDB sinifində private final SessionFactory sessionFactory sahəsini əlavə edin, və bu sahəni sinifin konstruktorunda initializasiya edin. Propertyləri adi məsələlərdəki kimi istifadə edin (MySQL versiya 8 ilə işləyəcəyik). Maraqlı olan isə
    properties.put(Environment.HBM2DDL_AUTO, "update");
    
    Buraxmadan əl ilə (ya da sql skripti icra etməklə) cədvəli yaratmağa ehtiyac qalmayacaq.
  10. Sınıfın bütün metodlarını həyata keçirin. Müxtəliflik üçün belə etməyi təklif edirəm:
    • getAll metodu NativeQuery vasitəsilə həyata keçirilsin - bu metod pageNumber - səhifə nömrəsi, pageSize - səhifədəki qeydlərin sayı parametrlərini nəzərə alaraq bütün oyunçuları almalıdır.
    • getAllCount metodu NamedQuery vasitəsilə həyata keçirilsin. Verilənlər bazasında olan bütün oyunçuların sayını qaytarmalıdır.
    • beforeStop metodunda sessionFactory metodunu çağır close. Metod üzərində @PreDestroy annotasiyası olduğuna görə Spring bu metodu tətbiqin dayandırılması öncəsi çağıracaq və bu sistemin bütün resurslarını düzgün şəkildə azad etməyə imkan verəcək.
    • Qalan metodların həyata keçirilməsi sənin ixtiyarındadır. Ancaq, dəyişiklik edən metodlar üçün tranzaksiyalar və kommitlər etməyi unutma.
  11. Tətbiqi işə salın. Hər şeyi düzgün etmisinizsə - işlək bir tətbiq əldə edəcəksiniz. Ancak orada heç bir məlumat yoxdur, ona görə də məlumatların görünməsi üçün Workbench vasitəsilə init.sql skriptini (resurslardan) icra edin. Sonra brauzerdə F5 düyməsini bas və bütün metodların doğru həyata keçirildiyini yoxlayın.
  12. Hibernate'in hansı sorğuları vasitəsilə həyata keçirildiyini maraqlı olar baxmaq, buna görə sorğuların loglaşdırılmasını əlavə edəcəyik. Bunun üçün pom.xml-ə p6spy:p6spy:3.9.1 asılılığını əlavə edin. Resurs qovluğunda spy.properties faylını yaradın, burada qeyd edərək:
    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
    
    Və PlayerRepositoryDB sinifinin konstruktorunda iki seçimi dəyişin:
    properties.put(Environment.DRIVER, "com.p6spy.engine.spy.P6SpyDriver");
    properties.put(Environment.URL, "jdbc:p6spy:mysql://localhost:3306/rpg");
    
    İndi hər sorğu üçün server çıxışında 2 xətt görəcəksiniz. Birinci - hansı state hazırlanıb, ikinci - parametrlərlə birgə sorğu.

Budur, layihə hazırdır, təbrik edirəm səni!

Əslində, Hibernate ilə Spring-dən iş üçün başqa bir yanaşma istifadə olunur, bu barədə beşinci modulda danışacağıq.


Layihənin analizi.
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION