1.1 वर्गांचे टेबलवर मॅपिंग करणे

JDBC शिकल्यानंतर, तुम्हाला बहुधा जावा अॅप्लिकेशनच्या डेटाबेससह काम करणे आनंददायक आहे असे समजेल. जर मी तुम्हाला सांगितले की हे सर्व काम 10 पट सोपे केले जाऊ शकते?

SQL भाषेचा मुख्य फायदा काय आहे? ही एक घोषणात्मक भाषा आहे - ती आपल्याला काय मिळवायचे आहे याचे वर्णन करते आणि ते कसे करायचे याबद्दल काहीही सांगत नाही. कसे - ही SQL सर्व्हरची चिंता आहे.

डेटाबेससह कार्य करताना समान दृष्टीकोन वापरला जाऊ शकतो.

आदर्श जगात, आम्ही डेटाबेसवर SQL क्वेरी लिहू शकतो, आणि प्रतिसादात आम्ही अनेक तुकड्यांसाठी विनंती केल्यास, आम्हाला तयार केलेले Java ऑब्जेक्ट्स किंवा Java ऑब्जेक्ट्सचे संकलन प्राप्त होईल.

मी काय म्हणू शकतो, 2000 मध्ये अनेक लोकांनी हेच विचार केले आणि त्यांचे स्वतःचे ORM फ्रेमवर्क लिहिण्याचा निर्णय घेतला.

ORM म्हणजे ऑब्जेक्ट-रिलेशनल मॅपिंग आणि मूलत: SQL क्वेरीसाठी Java ऑब्जेक्ट्सचे मॅपिंग आहे.

मुलांनी एक अतिशय सोपी गोष्ट आणली - डेटाबेसमधील प्रत्येक टेबल Java ऍप्लिकेशनमधील काही वर्गाशी संबंधित असणे आवश्यक आहे . Java ऍप्लिकेशनमध्ये, आम्ही ऑब्जेक्ट्ससह ऑपरेट करतो आणि या ऑब्जेक्ट्सना डेटाबेसमध्ये स्वतःला कसे जतन करायचे हे आधीच माहित आहे.

या समस्येचे निराकरण करण्यासाठी तीन दृष्टिकोन होते आणि ते यासारखे काहीतरी दिसले:

  1. ऑब्जेक्ट स्वतःला डेटाबेसमध्ये सेव्ह करते आणि डेटाबेसमधील माहितीच्या आधारे त्याचे फील्ड अपडेट करते.
  2. ऑब्जेक्ट स्वतःला डेटाबेसमध्ये सेव्ह करण्यास सक्षम आहे, परंतु हे केस कधीही सुरू करत नाही.
  3. ऑब्जेक्टमध्ये फक्त डेटा असतो आणि कोणीतरी तो डेटाबेसमध्ये सेव्ह करतो आणि डेटाबेसमधून लोड करतो.

सुरुवातीला, प्रथम दृष्टीकोन वर्चस्व गाजवला, नंतर ऍप्लिकेशन सर्व्हर आणि एंटरप्राइझ जावा बीन्स लोकप्रिय होते. पर्सिस्टन्स ईजेबी नावाचा बीन्सचा एक संपूर्ण वर्ग होता जो डेटाबेसमध्ये स्वतःला सेव्ह करू शकतो.

पण एक दिवस सगळं बदललं...

1.2 हायबरनेटचा उदय

2001 मध्ये, हायबरनेट फ्रेमवर्कची पहिली आवृत्ती प्रसिद्ध झाली. हे एक अतिशय साधे फ्रेमवर्क होते, परंतु सामान्य "मूर्ख वस्तू" वापरण्यास परवानगी दिली ज्यांना डेटाबेसमध्ये कसे संग्रहित केले जावे किंवा ते तेथून कसे लोड करावे याबद्दल काहीही माहिती नसते.

XML फाइल वापरून डेटाबेसमधील टेबलमधील Java वर्ग आणि स्तंभांच्या फील्डचे मॅपिंग सेट केले गेले. आणि कधीकधी ते खूप अवजड होते. ठीक आहे, मी कोणाची चेष्टा करत आहे. ते XML कोडचे भारी कॅनव्हासेस होते. आणि परिस्थिती केवळ या वस्तुस्थितीमुळे वाचली गेली की 20 वर्षांपूर्वी इतके मोठे डेटाबेस नव्हते.

परंतु प्रत्यक्षात, डेटाबेसमध्ये जतन करणे आवश्यक असलेली ऑब्जेक्ट तेथे जतन केलेल्या कोडपासून वेगळे करणे हा सर्वात शक्तिशाली निर्णय होता . हे समाधान खरोखर स्पष्ट नाही. कारण एन्कॅप्स्युलेशनचे तत्त्व असे सांगते की ऑब्जेक्टला ते कसे संग्रहित आणि लोड करणे आवश्यक आहे याबद्दल चांगले माहिती असते.

आणि ORM दृष्टिकोन खरोखरच ती संकल्पना मोडतो. डेटा वर्ग त्याची अंतर्गत रचना उघड करतो, परंतु विविध प्रकारच्या वस्तूंच्या गटांसह ऑपरेट करणे खूप सोपे झाले आहे.

Java 5 रिलीझ झाल्यानंतर एक मोठी प्रगती झाली , जेव्हा JDK मध्ये दोन गोष्टी दिसल्या:

  • भाष्ये
  • प्रॉक्सी

भाष्येXML त्वरीत बदलण्यात आले, आणि आता Java क्लासच्या डेटाबेसमधील टेबलवर जावा क्लास मॅप करण्यासाठी सर्व आवश्यक सेटिंग्ज निर्दिष्ट करणे सोपे होते.

प्रॉक्सीहायबरनेट वापरकर्त्यासाठी इतके लक्षणीय नाही, परंतु त्यांचे योगदान अधिक गंभीर होते. जेव्हा तुम्ही हायबरनेट कडून विशिष्ट वस्तू किंवा वस्तूंची विनंती करता, तेव्हा ते तुम्हाला फक्त एक स्टब (प्रॉक्सी) परत करते आणि त्याच्या पद्धतींवरील सर्व कॉल इंटरसेप्ट करते.

यामुळे विविध आळशी लोडिंग यंत्रणा कार्यान्वित करणे शक्य झाले आणि हायबरनेटची गती आणि कार्यक्षमता त्या काळासाठी पूर्णपणे आकाश-उच्च पातळीवर वाढवली. हायबरनेट हे केवळ एक वास्तविक उद्योग मानक बनले नाही - ते इतर भाषांमध्ये अनुवादित केले जाऊ लागले आहे. तर, उदाहरणार्थ, फ्रेमवर्क NHibernate C# साठी दिसू लागले.

1.3 जेपीएचा उदय

डी फॅक्टो त्यानंतर डी ज्यूर मान्यता. JDK डेव्हलपर्सनी डेटाबेसमधील टेबल्सवर ऑब्जेक्ट्सचा अचूक मॅप कसा करायचा याचे स्पेसिफिकेशन तयार करण्याचा निर्णय घेतला. हे तपशील म्हणतातजेपीए- Java Persistence API.

हे नक्की स्पेसिफिकेशन आहे. हे वर्णन करते की प्रत्येक गोष्ट कशी कार्य करते आणि आम्हाला वर्गाच्या विविध भागांना चिन्हांकित करण्यासाठी कोणती भाष्ये आवश्यक आहेत जर आम्हाला त्यातील ऑब्जेक्ट्स डेटाबेसमध्ये सेव्ह करायचे असतील.

असे दिसते की मुलांनी हायबरनेटला आधार म्हणून घेतले आणि त्यातून पॅकेजची नावे बदलली. कारण हायबरनेटमध्ये असलेल्या सर्व भाष्ये जवळजवळ एक-एक करून JPA वर हलवली गेली.

आज, हायबरनेट संपूर्ण JPA तपशील तसेच काही अतिरिक्त वैशिष्‍ट्ये पूर्णतः लागू करते जे त्‍यासोबत काम करण्‍यास अधिक सोयीस्कर बनवते. म्हणून, मानकीकरणाच्या दृष्टीने, आम्ही असे म्हणू शकतो की हायबरनेटमध्ये वैशिष्ट्यांचे दोन संच आहेत:

  • जेपीए मानक
  • हायबरनेट नेटिव्ह API (अतिरिक्त कार्यक्षमता)

अधिकृत हायबरनेट दस्तऐवजीकरण हे असे वर्णन करते:

परंतु माझ्या अनुभवावर आधारित आणि हायबरनेट दस्तऐवजीकरण पुन्हा वाचल्यानंतर, मी म्हणू शकतो की JPA आणि हायबरनेट API 95% समान आहेत. त्या फक्त एकसारख्या संकल्पना आहेत.

1.4 हायबरनेटसाठी मावेन

मी हायबरनेटचे खूप कौतुक केले असल्याने, मला वाटते की त्याच्यासोबत थोडे कठीण काम करण्याची वेळ आली आहे.

प्रथम, एक अधिकृत साइट आहे, जिथे इंग्रजी-भाषेतील कागदपत्रांचा एक समूह आहे. तिचा अर्थातच संदर्भ माहितीत पूर्वाग्रह आहे, प्रशिक्षणात नाही. परंतु स्त्रोत डीबग करण्यापेक्षा हे अद्याप चांगले आहे, बरोबर? :)

सूचना:

  1. तुम्ही लिंक उघडा .
  2. तू तिच्याकडे बराच वेळ पाहतोस.
  3. CodeGym वर परत येत आहे.
  4. तुम्ही माझी पुढील व्याख्याने वाचा.

माझे काम क्लिष्ट गोष्टी सोप्या करणे आणि सोप्या शब्दात समजावून सांगणे आहे. आणि जर तुम्ही या पातळीपर्यंत पोहोचलात तर मी ते करू शकतो.

ठीक आहे, हायबरनेटसह प्रारंभ करण्यासाठी, तुम्हाला ते तुमच्या pom.xml मध्ये जोडणे आवश्यक आहे. आजपर्यंत, हायबरनेटची 6 वी आवृत्ती आधीच उपलब्ध आहे, किंवा त्याऐवजी 6.1.1, म्हणून आम्ही नवीनतम आवृत्तीसह कसे कार्य करावे ते शिकू.

तुमच्या pom.xml मध्ये फक्त या ओळी जोडा:

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

जर तुम्ही हे व्याख्यान 2023+ च्या विंडोच्या बाहेर वाचत असाल, तर नवीन आवृत्ती येथे डाउनलोड केली जाऊ शकते .

महत्वाचे! हायबरनेट वापरत असलेल्या काही लायब्ररी JDK 11 आणि JDK 17 मध्ये नापसंत केल्या गेल्या आहेत, त्यामुळे तुम्हाला तुमचा प्रकल्प सुरू करण्यात आणि चालवण्यात अडचण येत असल्यास, त्यात या अवलंबित्व जोडा:

<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>