3.1 हायबरनेट आणि डेटाबेस लिंक करणे

आम्ही Maven वापरून आमच्या ऍप्लिकेशनशी हायबरनेट कसे कनेक्ट करायचे आणि भाष्ये वापरून वर्गांमध्ये टेबल्स कसे मॅप करायचे ते शिकलो. आणि आता पुढचा प्रश्न उद्भवतो - आपण डेटाबेसमधून ऑब्जेक्ट्स कसे वाचू किंवा त्यांना तिथे कसे जतन करू?

खूप वेगाने नको. सर्व प्रथम, आपल्याला आणखी तीन गोष्टी हाताळण्याची आवश्यकता आहे:

  • डेटाबेस कनेक्शन कॉन्फिगर करत आहे
  • हायबरनेट सेट करत आहे
  • 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 आधारित कॉन्फिगरेशन
hibernate.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 प्रकार निर्दिष्ट करा
    • बोली (DBMS प्रकार) निर्दिष्ट करा, उदाहरणार्थ, Oracle 9.0
    • या DBMS सह कार्य करण्यासाठी JDBC ड्रायव्हरचे नाव निर्दिष्ट करा
  2. डेटाबेसमध्ये अधिकृततेसाठी डेटा निर्दिष्ट करा
    • डेटाबेस url
    • वापरकर्तानाव
    • पासवर्ड
  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();
     	}
   }
}

डेटाबेसमध्ये क्वेरी कार्यान्वित करण्यापूर्वी, तुम्हाला एक स्वतंत्र सत्र तयार करणे आवश्यक आहे. जर विनंत्या संबंधित असतील तर त्या त्याच सत्रात कार्यान्वित केल्या जाऊ शकतात. जर विनंत्या असंबंधित असतील (आणि त्यांच्यामध्ये काही मिनिटे जाऊ शकतात), तर त्यांना त्यांचे स्वतःचे सत्र करणे आवश्यक आहे.

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

तसेच, डेटाबेसमधील प्रत्येक क्वेरी स्वतःच्या व्यवहारात कार्यान्वित केली जाते. आपल्याला ते उघडणे आवश्यक आहे, आवश्यक ऑपरेशन्स करा आणि नंतर बंद करा (कमिट).

पुढील व्याख्यानांमध्ये, आम्ही हे सर्व कसे कार्य करते याचे अधिक तपशीलवार विश्लेषण करू.