JavaRush /Kurslar /All lectures for UZ purposes /Hibernate bo'yicha foydali maslahatlar

Hibernate bo'yicha foydali maslahatlar

All lectures for UZ purposes
Daraja, Dars
Mavjud

Ikki ma'lumotlar bazasi bilan bir vaqtning o'zida ishlash

Ko'pincha shunday vaziyatlar bo'ladi, qachonki sizga ikki ma'lumotlar bazasi bilan bir vaqtning o'zida ishlash kerak bo'ladi. Masalan, siz bir bazadan ma'lumotlarni o'qib, ularni qayta ishlaysiz va boshqa bazaga yozasiz.

Yoki yanada keng tarqalgan variant. Sizning dasturingiz bir ish uchun mahalliy ma'lumotlar bazasiga ega, shuningdek, turli xil uzoq manbalardan SQL-formatda ma'lumotlarni o'qishi mumkin. Masalan, Excel.

Uzoqdagi ma'lumotlar manbalari uchun o'z Hibernate-mapping ni sozlash juda foydali bo'lishi mumkin, shunda dasturning biznes-logikasi sodda bo'ladi va faqat Java-obyektlar bilan ishlaydi.

Buni amalga oshirishning eng oddiy usuli — bir necha konfiguratsiya fayllariga ega bo'lish. Masalan:

hibernate_oracle.cfg.xml
<hibernate-configuration>
   <session-factory>
      <property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>
      <property name="hibernate.connection.driver_class">oracle.jdbc.OracleDriver</property>
      <property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:xe</property>
      <property name="hibernate.connection.username">system</property>
      <property name="hibernate.connection.password">secret<property>
 
      <mapping resource="com/javarush/hibernate/multipledatabase/employee.hbm.xml"/>
   </session-factory>
</hibernate-configuration>
hibernate_mysql.cfg.xml
<hibernate-configuration>
   <session-factory>
      <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
      <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
      <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/employee</property>
      <property name="hibernate.connection.username">root</property>
      <property name="hibernate.connection.password">secret</property>
 
      <mapping resource="com/javarush/hibernate/multipledatabase/employee.hbm.xml"/>
   </session-factory>
</hibernate-configuration>

Va nihoyat, Hibernate'i ishga tushirish kodi asosan shunchaki dublikat qilinadi:


   Configuration oracleCfg = new Configuration();
   oracleCfg.configure("/com/javarush/hibernate/multipledatabase/hibernate_oracle.cfg.xml");
   SessionFactory oracleSessionFactory = oracleCfg.buildSessionFactory();
   Session oracleSession = oracleSessionFactory.openSession();
 
   Configuration mysqlCfg = new Configuration();
   mysqlCfg.configure("/com/javarush/hibernate/multipledatabase/hibernate_mysql.cfg.xml");
   SessionFactory mySqlSessionFactory = mysqlCfg.buildSessionFactory();
   Session mysqlSession = mySqlSessionFactory.openSession();
                                        	
   Employee emp = oracleSession.get(Employee.class, "E0087");
   System.out.println("Employee retrived from Oracle Database");
                          	
   Transaction tx = mysqlSession.beginTransaction();
   mysqlSession.save(emp);
   tx.commit();
   System.out.println("Employee inserted in MySQL Database");

Xotira ichidagi baza

To'liq xotirada joylashgan ma'lumotlar bazasini taqdim etuvchi SGBDlar mavjud. Bunday SGBDlar ko'pincha oddiy kutubxona shaklida tarqatiladi va ularni oddiy dasturga qo'shish oson. Masalan, bunday SGBDlar — H2 yoki Hsqldb.

Ularni loyihangizga boshqa kutubxonalar singari qo'shish mumkin — Maven'dagi dependency orqali:

Hsqldb
<dependency>
    <groupId>org.hsqldb</groupId>
    <artifactId>hsqldb</artifactId>
    <version>2.6.1</version>
	<scope>test</scope>
</dependency>

Va ikkinchi bazaning darhol misoli:

H2 database
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>2.1.214</version>
    <scope>test</scope>
</dependency>

Ularni odatdagi bazalar bilan ishlashni konfiguratsiya qilish mumkin. Ammo qulaylik uchun bir nechta misollarni keltirib o'tamiz:

Hsqldb
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">org.hsqldb.jdbc.JDBCDriver</property>
        <property name="hibernate.connection.url">jdbc:hsqldb:mem:test</property>
        <property name="hibernate.connection.username">sa</property>
        <property name="hibernate.connection.password"></property>
        <property name="hibernate.dialect">org.hibernate.dialect.HSQLDialect</property>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.format_sql">true</property>
        <property name="hibernate.hbm2ddl.auto">create-drop</property>
        <property name="hibernate.current_session_context_class">thread</property>
    </session-factory>
</hibernate-configuration>

Ikki konfiguratsiyaning asosiy farqi — bu connection.url:

H2 database
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">org.h2.Driver</property>
        <property name="hibernate.connection.url">jdbc:h2:mem:test</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password"></property>
        <property name="hibernate.dialect">org.hibernate.dialect.H2Dialect</property>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.format_sql">true</property>
	    <property name="hibernate.hbm2ddl.auto">create-drop</property>
        <property name="hibernate.current_session_context_class">thread</property>
    </session-factory>
</hibernate-configuration>
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION