JavaRush /Kurslar /All lectures for UZ purposes /Mavzu bo'yicha loyiha: Hibernate (2)

Mavzu bo'yicha loyiha: Hibernate (2)

All lectures for UZ purposes
Daraja, Dars
Mavjud

Bugun bizning vazifamiz – Hibernate mavzusi bo'yicha ikkinchi loyihani bajarish. Uning maqsadi – MB strukturasiga tushunib olish, mavjud jadvalalarga entity mapping qilish va mapping to'g'ri bajarilganligini tekshirish uchun minimal funksionallik qo'shish.

Endi batafsil:

  1. Dump faylni yuklab olish va uni o'z kompyuteringizda ochish. MB sifatida biz MySQL o'rnatish paketi bilan birga tarqatiladigan test ma'lumotlar bazasini ishlatamiz. Dump MB holatini saqlash uchun kerak, chunki bir kun yoki oyda yoki yilda o'zgarmasligini kafolatlab bo'lmaydi.
  2. Loyiha uchun tayyor shablon bo'lmaydi, shuning uchun loyihani mustaqil yarat. Bu barcha kerakli dependencies bilan maven loyihasi bo'lishi kerak (hibernate-core-jakarta, mysql-connector-java, p6spy).
  3. Bizning mahalliy MB-ni Idea-dan datasource sifatida ulash. Shundan so'ng Database oynasida cursorni movie sxemaga qo'yib Alt+Ctrl+Shift+U tugmalar kombinatsiyasini bosing (faqat Ultimate versiyada ishlaydi). Bu butun movie sxemasining strukturani ko'rsatadi (ustunlar nomlari, kalitlar va hk.). Quyidagiga o'xshaydi:

    Qabul qilaman, ko'rish qiyin. Barcha ustun nomlari va izohlarni ko'rsatishni o'chiring:

    Buning natijasida MB sxemasini tahlil qilish mumkin bo'ladi:

  4. Sxema murakkab ko'rinadi, lekin hammasi shunchalik yomon emas. MB strukturasini tahlil qilish uchun nimadan boshlashni topish kerak. Yagona to'g'ri javob yo'q, lekin film jadvalidan boshlashni tavsiya qilaman. Keling, bir nechta bog'liqliklarni ko'rib chiqaylik:
    • film va film_text jadvallari o'rtasidagi bog'liqlik – bu aniq OneToOne bog'liqlik, chunki film_text jadvalida film_id maydon mavjud, u film jadvalidagi IDga murojaat qilmaydi (foreign key yo'q). Ammo nom va mantiqqa ko'ra, bu bog'liqlik mavjud bo'lishi kerak. Bundan tashqari, film_text jadvalida film_id maydon birlamchi kalit sifatida ishlaydi, bu bitta "film"ga faqat bitta "film matni" mos kelishini kafolatlaydi.
    • Endi film va category jadvallariga qaraylik. Mantiqan olganda, film bir nechta kategoriyaga ega bo'lishi mumkin. Va bir toifa, turli filmlarda bo'lishi mumkin. Bundan tashqari, ushbu ikki jadval o'rtasida film_category bog'lanish jadvali mavjud. Yuqorida aytib o'tilganlardan kelib chiqqan holda – bu aniq ManyToMany bog'lanish.
    • film va language jadvallariga qaraylik. Mantiqan olganda, film, ehtimol, turli tillarda tarjima qilingan bo'lishi mumkin va turli filmlar bir tilda bo'lishi mumkin. Ya'ni, ManyToMany bog'lanishga o'xshaydi. Ammo, agar film jadvalining tarkibiga qarasak, har bir qator noyob film ekanligini sezishimiz mumkin. Va qatorda faqat bitta language_id maydon mavjud (Bu yerda original_language_id mavjud, ammo barcha yozuvlarda bu null, shuning uchun biz uni e'tiborsiz qoldiramiz). Ya'ni, bitta film faqat bitta til bilan bo'lishi mumkin. Va bitta til, turli filmlarda bo'lishi mumkin. Bog'lanish – ManyToOne (bog'lanish film-dan language-ga yo'nalgan).
  5. Asosiy vazifa – barcha kerakli entity class-larni yaratish va ularni movie sxemasi jadvallariga mapping qilish.
  6. Yangi xaridor (customer jadval) yaratishga qodir bo'lgan metod qo'shish. Metod yordamida xaridorning manzili MB-ga yozilishini, lekin xaridor o'zi yoqlanmasligini ta'minlash uchun u transactional bo'lishi kerak.
  7. Avval ijaraga olingan filmni qaytarib bergan xaridor voqeasini tasvirlaydigan transactional metod qo'shish. Xaridor va ijara voqeasini o'zingiz xohlagancha tanlang. Filmlar reytingini qayta hisoblash shart emas.
  8. Do'konga (store) borib u yerdan inventar (inventory) ijaraga olgan va to'lovni (payment) xodim (staff) bilan amalga oshirgan xaridor voqeasini tasvirlaydigan transactional metod qo'shish. Filmni (inventory orqali) o'zingiz xohlagan tarzda tanlang. Yagona cheklov – film ijaraga olish uchun mavjud bo'lishi kerak. Ya'ni, either inventoryga hech qanday ijara yozuvi bo'lmasligi kerak yoki rental jadvalining return_date ustuni oxirgi ijarasi uchun to'ldirilishi kerak.
  9. Yangi film suratga olinib, ijaraga olish uchun mavjud bo'lganligini tasvirlaydigan transactional metod qo'shish. Film, til, aktyorlar, kategoriyalar va h.k.ning tanlovini o'zingiz qiling.
  10. Jadval strukturasini o'zgartirish mumkin emas. Ammo yaxshilash takliflaringizni qo'shish – kerak. Biz 4-bandda bir muammo joyini aniqladik (film_text jadvalida film_id maydon bo'yicha foreign keyning yo'qligi). MB strukturasida bunday "xatolar" mavjudmi, qarang. Agar mavjud bo'lsa – loyihaning rootida readme fayl qo'shing va bu xatolarni tasvirlang.

Loyihani tushunib olish:

Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION