3.1 हाइबरनेट और डेटाबेस को लिंक करना

हमने सीखा कि मावेन का उपयोग करके हाइबरनेट को हमारे एप्लिकेशन से कैसे जोड़ा जाए, और एनोटेशन का उपयोग करके तालिकाओं को कक्षाओं में कैसे मैप किया जाए। और अब अगला प्रश्न उठता है - हम डेटाबेस से वस्तुओं को कैसे पढ़ते हैं या उन्हें वहाँ सहेजते हैं?

इतना शीघ्र नही। सबसे पहले, आपको तीन और चीजों से निपटने की जरूरत है:

  • डेटाबेस कनेक्शन को कॉन्फ़िगर करना
  • हाइबरनेट की स्थापना
  • EntityManager के साथ काम करना

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

हाइबरनेट को कॉन्फ़िगर किया जा सकता है और तीन तरीकों से डेटाबेस की जानकारी दी जा सकती है

  • गुण फ़ाइल का प्रयोग करें
  • Hibernate.cfg.xml फ़ाइल का प्रयोग करें
  • कॉन्फ़िगरेशन बीन विधियों का उपयोग करें

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

3.2 डेटाबेस में प्राधिकरण

आइए सबसे महत्वपूर्ण - डेटाबेस कनेक्शन से शुरू करें। ऐसा करने के लिए, आपको डेटा प्रदान करने की आवश्यकता होगी ताकि हाइबरनेट वांछित डेटाबेस में लॉग इन कर सके।

गुण फ़ाइल कॉन्फ़िगरेशन
hibernate.properties
hibernate.dialect= org.hibernate.dialect.Oracle9Dialect
hibernate.connection.driver_class= oracle.jdbc.driver.OracleDriver
hibernate.connection.url= jdbc:oracle:thin:@localhost:1521:supershop
hibernate.connection.username=root
hibernate.connection.password=secret
hibernate.show_sql=true
hibernate.hbm2ddl=update

समान सेटिंग्स को xml फ़ाइल के रूप में सेट किया जा सकता है:

XML आधारित कॉन्फ़िगरेशन
हाइबरनेट.cfg.xml
<hibernate-configuration>
	<session-factory>

    	<property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
    	<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
    	<property name="connection.url">jdbc:oracle:thin:@localhost:1521:supershop</property>
    	<property name="connection.username">root</property>
    	<property name="connection.password">secret</property>
    	<property name="hibernate.show_sql ">true</property>
    	<property name="hbm2ddl.auto">update</property>

	</session-factory>
</hibernate-configuration>

दोनों उदाहरणों में, हम समान मूल्यों के साथ समान सेटिंग्स देखते हैं। यह सिर्फ इतना है कि पहला उदाहरण उन्हें गुण फ़ाइल के रूप में दर्शाता है , और दूसरा एक xml फ़ाइल के रूप में ।

इन सेटिंग्स को तीन समूहों में विभाजित किया गया है:

  1. DBMS के प्रकार बताएं
    • बोली निर्दिष्ट करें (डीबीएमएस प्रकार), उदाहरण के लिए, ओरेकल 9.0
    • इस DBMS के साथ कार्य करने के लिए JDBC ड्राइवर का नाम निर्दिष्ट करें
  2. डेटाबेस में प्राधिकरण के लिए डेटा निर्दिष्ट करें
    • डेटाबेस यूआरएल
    • उपयोगकर्ता नाम
    • पासवर्ड
  3. हाइबरनेट इंजन को कॉन्फ़िगर करना
    • hibernate.show_sql- हाइबरनेट कंसोल में सभी अनुरोधों को डुप्लिकेट करेगा जो इसे निष्पादित करता है
    • hbm2ddl.auto- यदि आवश्यक हो तो हाइबरनेट डेटाबेस संरचना को बदल देगा

कॉन्फ़िगरेशन सेट करने का तीसरा तरीका है - डिब्बे के माध्यम से। यह आमतौर पर स्प्रिंग के साथ संयोजन में उपयोग किया जाता है, इसलिए जब हम स्प्रिंगफ्रेमवर्क सीखते हैं तो हम इसे देखेंगे।

3.3 सत्र कारखाना प्राप्त करें

अगला कदम SessionFactory ऑब्जेक्ट प्राप्त करना है। इसे करने बहुत सारे तरीके हैं:

पहला तरीका hibernate.properties फ़ाइल का उपयोग करना है ।

ऐसा करने के लिए, आपको बस निम्नलिखित कोड लिखना होगा:

SessionFactory sessionFactory = new Configuration().buildSessionFactory();

यदि वर्तमान परियोजना निर्देशिका में hibernate.properties फ़ाइल नहीं मिलती है, तो एक अपवाद फेंक दिया जाएगा।

दूसरा तरीका hibernate.cfg.xml का उपयोग कर कॉन्फ़िगरेशन है ।

SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();

यदि आप ऐसा कोड लिखते हैं, तो hibernate.cfg.xml. अगर ऐसी कोई फ़ाइल नहीं मिलती है, तो विधि buildSessionFactory()अपवाद फेंक देगी।

तीसरा तरीका कॉन्फ़िगरेशन फ़ाइल को मैन्युअल रूप से सेट करना है ।

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

SessionFactory sessionFactory = new Configuration().configure("hibernate-dev.cfg.xml").buildSessionFactory();

विधि चार - हम एक कस्टम hibernate.properties फ़ाइल का उपयोग करते हैं:

ClassLoader classLoader = Thread.currentThread().getClassLoader();

Properties properties = new Properties();
properties.load(classLoader.getResourceAsStream("hibernate-dev.properties"));

SessionFactory sessionFactory = new Configuration()
            .addProperties(properties)
            .buildSessionFactory();

और अंत में, आप सभी आवश्यक मापदंडों को सीधे कोड में सीवे कर सकते हैं:

Properties properties = new Properties();
properties.put(Environment.DRIVER, "com.mysql.jdbc.Driver");
properties.put(Environment.URL, "jdbc:mysql://localhost:3306/supershop");
properties.put(Environment.USER, "root");
properties.put(Environment.PASS, "password");

SessionFactory sessionFactory = new Configuration()
            .setProperties(properties)
            .buildSessionFactory();

3.4 निर्दिष्ट करें कि निकाय वर्गों को कहाँ देखना है

लेकिन यह बिलकुल भी नहीं है। जब हम हाइबरनेट में एक SessionFactory ऑब्जेक्ट को कॉन्फ़िगर करते हैं, तो यह SessionFactory जाँचता है कि डेटाबेस में आवश्यक कॉलम प्रकार के साथ सभी आवश्यक तालिकाएँ मौजूद हैं।

और सत्र फ़ैक्टरी ऐसा करने में सक्षम होने के लिए , इसे इकाई वर्गों की एक सूची पारित करने की आवश्यकता है जिसे इसे डेटाबेस में मैप करने की आवश्यकता है।

इकाई वर्गों की सूची पास करने के तीन तरीके हैं:

विधि एक। hibernate.cfg.xmlएक पंक्ति जोड़ें जैसे :

<mapping class="class-qualified-name" />

उदाहरण:

<mapping class="com.codegym.data.User" />
<mapping class="com.codegym.data.Employee" />
<mapping class="com.codegym.data.Task" />

विधि दो। कॉन्फ़िगरेशन ऑब्जेक्ट पर विधि को कॉल करें addAnnotatedClass()। उदाहरण:

SessionFactory sessionFactory = new Configuration()
   	.configure()
   	.addAnnotatedClass(com.codegym.data.User.class)
   	.buildSessionFactory();

यदि कई वर्ग हैं, तो आप उन्हें पूरे पैकेज में जोड़ सकते हैं:

SessionFactory sessionFactory = new Configuration()
   	.configure()
   	.addPackage("com.codegym.data")
   	.buildSessionFactory();

3.5 अंतिम उदाहरण

अब जब हमने सीख लिया है कि SessionFactory ऑब्जेक्ट को कैसे कॉन्फ़िगर करना है, तो आइए कोड लिखते हैं जो इसका उपयोग करेगा।

इसमें तीन विधियाँ शामिल होंगी:

  1. हाइबरनेट को कॉन्फ़िगर करना
  2. विधि जो सभी कर्मचारियों को डेटाबेस से प्राप्त करती है
  3. विधि जो एक नए कर्मचारी को डेटाबेस में सहेजती है

यह कोड टेम्प्लेट कुछ इस तरह दिखाई देगा:

class EmployeeManager {
    private SessionFactory sessionFactory;

    public void class init() {
    	this.sessionFactory = new Configuration()
        	.configure()
        	.buildSessionFactory();
   }

   public List<Employee> getAllEmployes() {
         try (Session session = sessionFactory.openSession()) {
  	          Query<Employee> query = session.createQuery("from Employee", Employee.class);
    	        return query.list();
         }
   }

   public void addEmployee(Employee employee ) {
     	try (Session session = sessionFactory.openSession()) {
            Transaction transaction = session.beginTransaction();
       	    session.save(employee);
            transaction.commit();
     	}
   }
}

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

यदि आप डेटाबेस से डेटा पढ़ना चाहते हैं या जटिल क्वेरी निष्पादित करना चाहते हैं, तो आपको पहले एक क्वेरी ऑब्जेक्ट बनाना होगा और अपनी क्वेरी को निष्पादित करने के लिए इसका उपयोग करना होगा।

साथ ही, डेटाबेस में प्रत्येक क्वेरी को अपने लेनदेन में निष्पादित किया जाता है। आपको इसे खोलने, आवश्यक संचालन करने और फिर बंद करने (कमिट) करने की आवश्यकता है।

निम्नलिखित व्याख्यानों में, हम और अधिक विस्तार से विश्लेषण करेंगे कि यह सब कैसे काम करता है।