JavaRush /Kurslar /All lectures for UZ purposes /Loyiha mavzusi: Hibernate #1

Loyiha mavzusi: Hibernate #1

All lectures for UZ purposes
Daraja, Dars
Mavjud

Frontendning uchinchi modulidagi RPG serveri uchun admin panel yaratish kerak bo'lgan loyihani eslaysizmi? Agar eslasangiz, u yerda serverda ma'lumotlar xarita sifatida saqlangan edi. Albatta, real hayotda bunday saqlash tizimlari ishlatilmaydi, bazalar ma'lumotlar ishlatiladi. Bu loyihaning maqsadi Hibernate yordamida repository qatlamining muqobil amalga oshirishini yozishdan iborat.

Buning uchun kerak:

  1. Repodan fork qilish
  2. O'zingizning loyiha versiyasini kompyuteringizga yuklab oling.
  3. pom.xml ga dependencies qo'shing:
    • mysql: mysql-connector-java: 8.0.30
    • org.hibernate: hibernate-core-jakarta: 5.6.11.Final
  4. Maven build qiling (mvn clean install). Turli xillik uchun Java versiyasi 1.8 dan foydalandik.
  5. Idea orqali ishga tushirish konfiguratsiyasini qo'shing. Bu punktning amalga oshirilishini https://javarush.com/quests/lectures/jru.module3.lecture02 (4-punkt) bo'limida ko'rishingiz mumkin. Farqi faqat artefakt nomida. Agar hammasi to'g'ri amalga oshirilgan bo'lsa va ilovani ishga tushirsangiz, taxminan quyidagicha ko'rinasiz:
  6. Workbenchda RPG sxemasini yaratish uchun skriptni bajaring:
    CREATE SCHEMA `rpg` ;
    
  7. Ixtiyoriy. Agar qanday harakat qilishini ko'rishni xohlasangiz, com.game.service.PlayerService klassida konstruktor parametrida @Qualifier annotatsiyasining qiymatini "db" dan "memory" ga o'zgartirishingiz mumkin. Bu holda Spring interface ijrosi sifatida IPlayerRepository klassi PlayerRepositoryMemory ni ishlatadi. Testdan keyin @Qualifier annotatsiyasining qiymatini "db" ga qaytarishni unutmang.
  8. com.game.entity.Player entity klassida barcha zaruriy annotatsiyalarni qo'ying. Jadval "player", sxema "rpg" deb nomlanishi kerak. Enumlar uchun @Enumerated(EnumType.ORDINAL) dan foydalaning, @Column annotatsiyasidan tashqari. Eslatma: name maydonining uzunligi 12 ta belgigacha, title maydonining uzunligi 30 ta belgigacha bo'lishi kerak. Barcha maydonlar null bo'lmasligi kerak.
  9. PlayerRepositoryDB klassida private final maydoni SessionFactory sessionFactory ni qo'shing, bu maydonni klass konstruktorida initsializatsiya qiling. Properties odatdagi vazifalardagi kabi foydalaning (MySQL 8 versiyasidagi DB bilan ishlaymiz). Qiziqarli joyi –
    properties.put(Environment.HBM2DDL_AUTO, "update");
    
    Bu, jadvallarni qo'lda yaratishga hojat qoldirmaydi (yoki SQL skriptini bajarish bilan).
  10. Barcha klass metodlarini amalga oshiring. Turli xillik uchun bunday qiling:
    • Metod getAll ni NativeQuery orqali amalga oshiring — bu metod barcha o'yinchilarni quyidagi parametrlar hisobga olgan holda olish kerak: pageNumber - sahifa raqami, pageSize - sahifadagi yozuvlar soni
    • Metod getAllCount ni NamedQuery orqali amalga oshiring. Ma'lumotlar bazasidagi o'yinchilarning umumiy sonini qaytarishi kerak.
    • beforeStop metodida sessionFactory dan close metodini chaqiring. Metod ustidagi @PreDestroy annotatsiyasi tufayli, Spring bu metodni ilovaning to'xtashi oldidan chaqiradi va bu tizimning barcha resurslarini to'g'ri ravishda bo'shatishga imkon beradi.
    • Qolgan metodlarni o'z ixtiyoringizga ko'ra amalga oshiring. Ammo, DB mazmunini qandaydir o'zgartiradigan metodlar uchun transaksiyalar va commit haqida unutmang.
  11. Ilovani ishga tushiring. Agar hamma narsa to'g'ri bajarilgan bo'lsa, siz ishlaydigan ilova olasiz. Faqat bu yerda hech qanday ma'lumot yo'q, shuning uchun ma'lumotlar paydo bo'lishi uchun Workbench orqali init.sql skriptini (resurslardan) bajaring. Shundan keyin brauserda F5 bosib, barcha metodlarni to'g'ri amalga oshirganingizni tekshiring.
  12. Hibernate qanday so'rovlarni bajarishini ko'rish qiziqarli bo'ladi, shuning uchun so'rovlarni loglashni qo'shamiz. Buning uchun pom.xml ga p6spy:p6spy:3.9.1 dependensiyasini qo'shing. Resurslar papkasida spy.properties faylini yarating va unda belgilang:
    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
    
    Va PlayerRepositoryDB klassi konstruktorida ikkita parametrni o'zgartiring:
    properties.put(Environment.DRIVER, "com.p6spy.engine.spy.P6SpyDriver");
    properties.put(Environment.URL, "jdbc:p6spy:mysql://localhost:3306/rpg");
    
    Endi server chiqishida har bir so'rov uchun 2 qatorni ko'rasiz. Birinchi – qaysi statement tayyorlangan, ikkinchi – parametrlar qo'shilgan so'rov.

Hamma narsa tayyor, loyihani tabriklayman!

Aslida, Hibernate bilan Springdan ishlash uchun boshqa yondashuv ishlatiladi, va bu haqida beshinchi modulda gaplashamiz.


Loyihani ko'rib chiqish.
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION