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:
- Repodan fork qilish
- O'zingizning loyiha versiyasini kompyuteringizga yuklab oling.
- pom.xml ga dependencies qo'shing:
- mysql: mysql-connector-java: 8.0.30
- org.hibernate: hibernate-core-jakarta: 5.6.11.Final
- Maven build qiling (mvn clean install). Turli xillik uchun Java versiyasi 1.8 dan foydalandik.
- 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:
- Workbenchda RPG sxemasini yaratish uchun skriptni bajaring:
CREATE SCHEMA `rpg` ; - Ixtiyoriy. Agar qanday harakat qilishini ko'rishni xohlasangiz,
com.game.service.PlayerServiceklassida konstruktor parametrida@Qualifierannotatsiyasining qiymatini "db" dan "memory" ga o'zgartirishingiz mumkin. Bu holda Spring interface ijrosi sifatidaIPlayerRepositoryklassiPlayerRepositoryMemoryni ishlatadi. Testdan keyin@Qualifierannotatsiyasining qiymatini "db" ga qaytarishni unutmang. com.game.entity.Playerentity klassida barcha zaruriy annotatsiyalarni qo'ying. Jadval "player", sxema "rpg" deb nomlanishi kerak. Enumlar uchun@Enumerated(EnumType.ORDINAL)dan foydalaning,@Columnannotatsiyasidan tashqari. Eslatma: name maydonining uzunligi 12 ta belgigacha, title maydonining uzunligi 30 ta belgigacha bo'lishi kerak. Barcha maydonlar null bo'lmasligi kerak.PlayerRepositoryDBklassida private final maydoniSessionFactory sessionFactoryni qo'shing, bu maydonni klass konstruktorida initsializatsiya qiling. Properties odatdagi vazifalardagi kabi foydalaning (MySQL 8 versiyasidagi DB bilan ishlaymiz). Qiziqarli joyi –
Bu, jadvallarni qo'lda yaratishga hojat qoldirmaydi (yoki SQL skriptini bajarish bilan).properties.put(Environment.HBM2DDL_AUTO, "update");- Barcha klass metodlarini amalga oshiring. Turli xillik uchun bunday qiling:
- Metod
getAllniNativeQueryorqali amalga oshiring — bu metod barcha o'yinchilarni quyidagi parametrlar hisobga olgan holda olish kerak:pageNumber- sahifa raqami,pageSize- sahifadagi yozuvlar soni - Metod
getAllCountniNamedQueryorqali amalga oshiring. Ma'lumotlar bazasidagi o'yinchilarning umumiy sonini qaytarishi kerak. beforeStopmetodidasessionFactorydanclosemetodini chaqiring. Metod ustidagi@PreDestroyannotatsiyasi 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.
- 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.
- 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:
Vadriverlist=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.MultiLineFormatPlayerRepositoryDBklassi konstruktorida ikkita parametrni o'zgartiring:
Endi server chiqishida har bir so'rov uchun 2 qatorni ko'rasiz. Birinchi – qaysi statement tayyorlangan, ikkinchi – parametrlar qo'shilgan so'rov.properties.put(Environment.DRIVER, "com.p6spy.engine.spy.P6SpyDriver"); properties.put(Environment.URL, "jdbc:p6spy:mysql://localhost:3306/rpg");
Hamma narsa tayyor, loyihani tabriklayman!
Aslida, Hibernate bilan Springdan ishlash uchun boshqa yondashuv ishlatiladi, va bu haqida beshinchi modulda gaplashamiz.
Loyihani ko'rib chiqish.
GO TO FULL VERSION