1.1 कक्षाओं को तालिकाओं में मैप करना

JDBC सीखने के बाद, आपको सबसे अधिक संभावना है कि जावा एप्लिकेशन से डेटाबेस के साथ काम करना अभी भी एक खुशी है। क्या होगा अगर मैं आपसे कहूं कि यह सारा काम 10 गुना आसान तरीके से किया जा सकता है?

SQL भाषा का मुख्य लाभ क्या है? यह एक घोषणात्मक भाषा है - यह वर्णन करती है कि हम क्या प्राप्त करना चाहते हैं, और इसे कैसे करना है, इसके बारे में कुछ भी नहीं कहते हैं। कैसे - यह SQL सर्वर की चिंता है।

डेटाबेस के साथ काम करते समय उसी दृष्टिकोण का उपयोग किया जा सकता है।

एक आदर्श दुनिया में, हम बस डेटाबेस में SQL क्वेरी लिख सकते हैं, और अगर हम कई टुकड़ों का अनुरोध करते हैं, तो जवाब में हमें तैयार जावा ऑब्जेक्ट या जावा ऑब्जेक्ट का संग्रह प्राप्त होगा।

मैं क्या कह सकता हूं, 2000 में कई लोगों ने यही सोचा और अपना खुद का ओआरएम ढांचा लिखने का फैसला किया।

ओआरएम ऑब्जेक्ट-रिलेशनल मैपिंग के लिए खड़ा है और अनिवार्य रूप से एसक्यूएल प्रश्नों के लिए जावा ऑब्जेक्ट्स का मैपिंग है।

लोग एक बहुत ही सरल बात लेकर आए - डेटाबेस में प्रत्येक तालिका को जावा एप्लिकेशन में किसी वर्ग के अनुरूप होना चाहिए । जावा एप्लिकेशन में, हम ऑब्जेक्ट्स के साथ काम करते हैं, और ये ऑब्जेक्ट पहले से ही जानते हैं कि डेटाबेस में खुद को कैसे सहेजना है।

इस समस्या को हल करने के लिए तीन तरीके थे, और वे कुछ इस तरह दिखते थे:

  1. ऑब्जेक्ट खुद को डेटाबेस में सेव करता है और डेटाबेस से मिली जानकारी के आधार पर अपने फील्ड को अपडेट करता है।
  2. ऑब्जेक्ट खुद को डेटाबेस में सेव करने में सक्षम है, लेकिन इस मामले को कभी शुरू नहीं करता है।
  3. ऑब्जेक्ट में केवल डेटा होता है, और कोई इसे डेटाबेस में सहेजता है और इसे डेटाबेस से लोड करता है।

प्रारंभ में, पहला दृष्टिकोण हावी था, फिर एप्लिकेशन सर्वर और एंटरप्राइज़ जावा बीन्स लोकप्रिय थे। पर्सिस्टेंस ईजेबी नामक बीन्स की एक पूरी श्रेणी भी थी जो खुद को डेटाबेस में सहेज सकती थी।

लेकिन एक दिन सब कुछ बदल गया...

1.2 हाइबरनेट का उद्भव

2001 में, हाइबरनेट ढांचे का पहला संस्करण जारी किया गया था। यह एक बहुत ही सरल रूपरेखा थी, लेकिन इसने साधारण "बेवकूफ वस्तुओं" के उपयोग की अनुमति दी थी, जो इस बारे में कुछ नहीं जानते थे कि उन्हें डेटाबेस में कैसे संग्रहीत किया जाना चाहिए या वहां से लोड किया जाना चाहिए।

डेटाबेस में एक तालिका में जावा कक्षाओं और स्तंभों के क्षेत्रों का मानचित्रण एक XML फ़ाइल का उपयोग करके सेट किया गया था। और कभी-कभी वे काफी भारी होते थे। ठीक है, मैं किससे मजाक कर रहा हूं। वे XML कोड के भारी कैनवस थे। और स्थिति को केवल इस तथ्य से बचाया गया था कि 20 साल पहले इस तरह के विशाल डेटाबेस नहीं थे।

लेकिन वास्तव में, सबसे शक्तिशाली निर्णय अंततः उस वस्तु को अलग करना था जिसे डेटाबेस में सहेजे जाने वाले कोड से डेटाबेस में सहेजा जाना चाहिए । यह समाधान वास्तव में स्पष्ट नहीं है। क्योंकि एनकैप्सुलेशन का सिद्धांत बताता है कि वस्तु को सबसे अच्छा पता है कि इसे कैसे संग्रहीत और लोड किया जाना चाहिए।

और ओआरएम दृष्टिकोण वास्तव में उस अवधारणा को तोड़ देता है। डेटा वर्ग अपनी आंतरिक संरचना को उजागर करता है, लेकिन विभिन्न प्रकार की वस्तुओं के समूहों के साथ काम करना बहुत आसान हो गया है।

Java 5 की रिलीज के बाद एक बड़ी सफलता मिली , जब JDK में दो चीजें सामने आईं:

  • एनोटेशन
  • प्रतिनिधि

एनोटेशनएक्सएमएल को जल्दी से हटा दिया गया था, और अब जावा क्लास को सीधे जावा क्लास में डेटाबेस में टेबल पर मैप करने के लिए सभी आवश्यक सेटिंग्स निर्दिष्ट करना आसान था।

प्रतिनिधिहाइबरनेट उपयोगकर्ता के लिए इतना ध्यान देने योग्य नहीं है, लेकिन उनका योगदान और भी गंभीर था। जब आप हाइबरनेट से किसी विशिष्ट वस्तु या वस्तु का अनुरोध करते हैं, तो यह आपको केवल एक स्टब (प्रॉक्सी) देता है, और इसके तरीकों से सभी कॉलों को रोकता है।

इसने विभिन्न आलसी लोडिंग तंत्रों को लागू करना संभव बना दिया और उस समय के लिए हाइबरनेट की गति और दक्षता को पूरी तरह से उच्च स्तर तक बढ़ा दिया। हाइबरनेट न केवल एक वास्तविक उद्योग मानक बन गया है - इसका अन्य भाषाओं में अनुवाद होना शुरू हो गया है। तो, उदाहरण के लिए, सी # के लिए फ्रेमवर्क एनएचबेर्नेट दिखाई दिया।

1.3 जेपीए का उदय

वास्तव में कानूनी मान्यता के बाद। JDK डेवलपर्स ने डेटाबेस में तालिकाओं के लिए वस्तुओं को सही ढंग से मैप करने के तरीके पर एक विनिर्देश बनाने का निर्णय लिया। यह विशिष्टता कहलाती हैजेपीए- जावा दृढ़ता एपीआई।

यह बिल्कुल विनिर्देश है। यह वर्णन करता है कि सब कुछ कैसे काम करना चाहिए और यदि हम चाहते हैं कि इसकी वस्तुओं को डेटाबेस में सहेजा जाए तो हमें कक्षा के विभिन्न हिस्सों को चिह्नित करने के लिए किन एनोटेशन की आवश्यकता है।

ऐसा लगता है कि लोगों ने सिर्फ हाइबरनेट को एक आधार के रूप में लिया और उसमें से पैकेज के नाम बदल दिए। क्योंकि हाइबरनेट में मौजूद सभी एनोटेशन लगभग एक-एक करके जेपीए में चले गए।

आज, हाइबरनेट पूरे जेपीए विनिर्देशों को पूरी तरह से लागू करता है, साथ ही साथ कुछ अतिरिक्त सुविधाएं जो इसके साथ काम करना और भी अधिक आरामदायक बनाती हैं। इसलिए, मानकीकरण के संदर्भ में, हम कह सकते हैं कि हाइबरनेट में दो प्रकार की विशेषताएं हैं:

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

आधिकारिक हाइबरनेट प्रलेखन इस तरह इसका वर्णन करता है:

लेकिन दोनों मेरे अनुभव के आधार पर और हाइबरनेट प्रलेखन को दोबारा पढ़ने के बाद, मैं कह सकता हूं कि जेपीए और हाइबरनेट एपीआई 95% समान हैं। वे सिर्फ समान अवधारणाएं हैं।

1.4 हाइबरनेट के लिए मावेन

चूंकि मैंने हाइबरनेट की बहुत प्रशंसा की है, इसलिए मुझे लगता है कि अब समय आ गया है कि इसके साथ थोड़ा कठिन काम किया जाए।

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

निर्देश:

  1. आप लिंक ओपन करें ।
  2. आप उसे बहुत देर तक देखते हैं।
  3. CodeGym को लौटें।
  4. आप मेरे आगे के व्याख्यान पढ़ें।

मेरा काम जटिल चीजों को सरल बनाना और उन्हें सरल शब्दों में समझाना है। और अगर आप इस लेवल पर पहुंच गए हैं तो मैं यह कर सकता हूं।

खैर, हाइबरनेट के साथ आरंभ करने के लिए, आपको इसे अपने pom.xml में जोड़ना होगा। आज तक, हाइबरनेट का छठा संस्करण पहले से ही उपलब्ध है, या 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>