JavaRush /Kurslar /All lectures for UZ purposes /Object Relational Mapping

Object Relational Mapping

All lectures for UZ purposes
Daraja, Dars
Mavjud

1.1 Classlarni jadvalga moslashtirish

JDBC ni o'rgangandan so'ng ehtimol sening xayolingda Java-ilovadan ma'lumotlar bazasi bilan ishlash — bosh og'rig'u, deb o'ylading. Ammo agar men aytsamki, bu ishni 10 marta osonroq qilish mumkin desa-chi?

SQL tilining asosiy afzalligi nimada? Bu deklarativ til — u biz nimani olishimizni xohlashimizni ifodalaydi, va uni qanday qilish kerakligi haqida hech narsa demaydi. Qanday — bu SQL-serverning ishi.

Xuddi shu yondashuvni ma'lumotlar bazalari bilan ishlashda ham qo'llash mumkin.

Ideal dunyoda biz shunchaki ma'lumotlar bazasiga SQL-so'rovlar yozishimiz mumkin edi va javob sifatida tayyor Java-ob'ektlar, yoki agar bir nechta so'ragan bo'lsak, Java-ob'ektlar kolleksiyalari kelib tushardi.

Nima deysiz, 2000-yilda shunday fikrga kelib, bir necha bolalar o'zlarining ORM framework'larini yozishga qaror qilishdi.

ORM ochilishida Object-Relational Mapping ni bildiradi va asosan Java-ob'ektlarining SQL-so'rovlarga mosligini ifodalaydi.

Bolalar juda oddiy narsani o'ylab topishdi — ma'lumotlar bazasidagi har bir jadvalga Java-ilovada qandaydir class mos kelishi kerak. Java ilovasida biz ob'ektlar bilan ishlaymiz, va bu ob'ektlar o'zini ma'lumotlar bazasiga saqlashni o'zi biladi.

Bu muammoning uchta yondashuvi bor edi, va ular taxminan quyidagicha ko'rinardi:

  1. Ob'ekt o'zini ma'lumotlar bazasiga saqlaydi va ma'lumotlar bazasidagi ma'lumotlar asosida o'z maydonlarini yangilaydi.
  2. Ob'ekt o'zini ma'lumotlar bazasiga saqlashni biladi, ammo bu ishning tashabbuskorini o'zi hech qachon qilmaydi.
  3. Ob'ekt faqat ma'lumotlarni o'z ichiga oladi, va uni ma'lumotlar bazasiga kimdir saqlaydi va ma'lumotlar bazasidan yuklaydi.

Dastlab birinchi yondashuv ustunlik qilardi, o'sha vaqtlar Application-serverlari va Enterprise Java Beans mashhur edi. Hatto o'zini ma'lumotlar bazasiga saqlashga qodir bo'lgan Persistence EJB deb nomlangan butun sinflar mavjud edi.

Ammo bir kun hammasi o'zgardi…

1.2 Hibernate ning paydo bo'lishi

2001-yilda Hibernate framework'ining birinchi versiyasi chiqdi. Bu juda oddiy framework edi, ammo u "g'oyani bilmagan oddiy ob'ektlar"dan foydalanishga imkon berdi, ular o'zlarini qanday qilib ma'lumotlar bazasiga saqlash va u yerdan yuklashni bilishmasdi.

Java-sinf maydonlari va ma'lumotlar bazasidagi jadvallardagi ustunlar o'rtasidagi moslashtirish XML-fayli yordamida belgilandi. Va ba'zida ular juda katta edi. Xo'sh, kimni aldamoqchi bo'layapman. Bu ulkan XML-kod parchalar edi. Va vaziyat faqat 20 yil muqaddam hozirgidek ulkan ma'lumotlar bazalari bo'lmagani bilan qutqarildi.

Lekin haqiqatda eng kuchli qaror nihoyat ma'lumotlar bazasiga saqlanish kerak bo'lgan ob'ektni uni saqlash kodidan ajratish edi. Bu qaror haqiqatda aniq emas edi. Chunki inkapsulyatsiya prinsipi obyekt o'zini qanday qilib saqlash va yuklashni eng yaxshi biladi deb aytadi.

Va ORM yondashuvi haqiqatan ham bu konsepsiyani buzadi. Data-class o'z ichki tuzilishini tashqariga ochib beradi, ammo turli xil turdagi obyektlar guruhlarini boshqarish ancha osonlashdi.

Jiddiy rivojlanish Java 5 chiqishidan keyin sodir bo'ldi, JDK ga ikkita narsa qo'shilganida:

  • Annotatsiyalar
  • Proxy

Annotatsiyalar tezda XML'ni siqib chiqarishdi, va endi bevosita Java-sinfida ma'lumotlar bazasidagi jadvalga Java-sinfini moslashtirish uchun kerakli sozlamalarni osonlik bilan belgilash mumkin edi.

Proxy foydalanuvchi uchun Hibernate'da shunchalik sezilmaydi, lekin ularning hissasi undan ham jiddiyroq edi. Hibernate dan muayyan obyekt yoki obyektlar so'raganingizda, u sizga shunchaki bir tur proxy qaytaradi, va uning barcha usullariga murojaat qilishni ushlaydi.

Bu Lazy Loading'ning turli mexanizmlarini amalga oshirishga imkon berdi va Hibernate ishining tezligi va samaradorligini o'sha vaqtlarda hukmron bo'lgan yuksak darajalarga ko'tardi. Hibernate nafaqat sanoat standarti de-fakto sifatida qabul qilindi — uni boshqa tillarga ham tarjima qilish boshlandi. Masalan, C# uchun NHibernate Framework paydo bo'ldi.

1.3 JPA ning paydo bo'lishi

De-fakto kelgandan so'ng de-jure qabul qilindi. JDK ishlab chiquvchilari obyektlarni ma'lumotlar bazasidagi jadvallarga moslashtirishning to'g'ri yo'lini yozish uchun spetsifikatsiya yaratishga qaror qilishdi. Bu spetsifikatsiya JPA — Java Persistence API deb ataladi.

Bu aynan spetsifikatsiya. U ishning qanday bajarilishi kerakligini va agar biz obyektlarni ma'lumotlar bazasiga saqlashni xohlasak, sinfning turli qismlarini qanday annotatsiyalar bilan belgilash kerakligini tushuntiradi.

Shunday tuyuladi, bu bolalar shunchaki Hibernate'ni asos qilib olishdi va uning paketlarining nomlarini o'zgartirishdi. Chunki Hibernate'dagi barcha annotatsiyalar JPA'ga deyarli bir xil ko'chirilgan.

Bugungi kunga kelsak, Hibernate JPA spetsifikatsiyasini to'liq amalga oshiradi va uni yanada qulay qilish uchun qo'shimcha imkoniyatlarni ham taqdim etadi. Standartizatsiya nuqtai nazaridan aytish mumkinki Hibernate ikkita funksiya to'plamiga ega:

  • JPA standarti
  • Hibernate Native API (qo'shimcha funksionallik)

Rasmiy Hibernate hujjatida bu shunday tasvirlanadi:

Afsuski, o'z tajribamga asoslanib, va Hibernate hujjatini qaytadan ko'rib chiqqandan so'ng ayta olamanki, JPA va Hibernate API 95% mos keladi. Bu aslida bir xil tushunchalar.

1.4 Hibernate uchun Maven

Shunday qilib, men Hibernate'ni juda maqtadim, endi u bilan ishlashni boshlash vaqti keldi deb o'ylayman.

Birinchidan, ochiq rasmiy sayt mavjud, unda inglizcha hujjatlarning katta hajmi bor. U, albatta, ma'lumotga qaratilgan, ta'limga emas. Ammo, baribir manbalarni debugging qilishdan ko'ra yaxshiroq, to'g'rimi? :)

Ko'rsatma:

  1. Havolani oching.
  2. Unga uzoq vaqt tikilib turing.
  3. JavaRush ga qayting.
  4. Mening keyingi darslarimni o'qib chiqing.

Men haqiqatan ham murakkab narsalarni sodda so'zlar bilan tushuntirish uchun ishlayman. Va agar siz ushbu darajaga yetib kelsangiz, demak, men bunga erishaman.

Xo'sh, Hibernate bilan ishlashni boshlash uchun avval uni o'z pom.xml faylingizga qo'shishingiz kerak. Bugungi kunda allaqachon Hibernate ning 6-versiyasi mavjud, aniqrog'i 6.1.1, shuning uchun biz eng yangi versiyasini ishlatishni o'rganamiz.

Shunchaki o'z pom.xml faylingizga quyidagi qatorlarni qo'shing:


<dependency>
	<groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
	<version>6.1.1.Final</version>
</dependency>

Agar siz ushbu darsni o'qiyotgan bo'lsangiz va tashqarida 2023+ yil bo'lsa, unda yangi versiyani bu yerdan yuklab olish mumkin.

Muҳim! Hibernate foydalanadigan ba'zi kutubxonalar JDK 11 va JDK 17 dan chiqarib tashlanadi, shuning uchun agar loyihani ishga tushirish bilan bog'liq muammolar yuzaga kelsa, bu qaramliklarni qo'shing:


  	<dependency>
        <groupId>jakarta.xml.bind</groupId>
        <artifactId>jakarta.xml.bind-api</artifactId>
      	<version>4.0.0</version>
  	</dependency>
 
  	<dependency>
        <groupId>org.glassfish.jaxb</groupId>
        <artifactId>jaxb-runtime</artifactId>
      	<version>4.0.0</version>
  	</dependency>
 
  	<dependency>
        <groupId>org.javassist</groupId>
        <artifactId>javassist</artifactId>
        <version>3.29.0-GA</version>
  	</dependency>

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