โค้ดยิม/หลักสูตรจาวา/All lectures for TH purposes/ความแตกต่างที่เป็นประโยชน์เกี่ยวกับไฮเบอร์เนต

ความแตกต่างที่เป็นประโยชน์เกี่ยวกับไฮเบอร์เนต

มีอยู่

ทำงานกับสองฐานในเวลาเดียวกัน

บ่อยครั้งที่มีสถานการณ์ที่คุณต้องทำงานกับสองฐานในเวลาเดียวกัน ตัวอย่างเช่น คุณอ่านข้อมูลจากฐานข้อมูลหนึ่ง ประมวลผล และเขียนไปยังอีกฐานข้อมูลหนึ่ง

หรือธรรมดากว่านั้น แอปพลิเคชันของคุณมีฐานข้อมูลโลคัลหนึ่งฐานข้อมูลให้ใช้งาน และยังสามารถอ่านข้อมูลจากแหล่งข้อมูลระยะไกลต่างๆ ที่สนับสนุนรูปแบบการสืบค้นข้อมูล SQL ตัวอย่างเช่น เอ็กเซล

สำหรับแหล่งข้อมูลระยะไกลเหล่านี้ จะมีประโยชน์มากในการปรับแต่งการแมปไฮเบอร์เนตของคุณ เพื่อให้ตรรกะทางธุรกิจของแอปพลิเคชันง่ายขึ้นและทำงานกับออบเจกต์ Java เท่านั้น

วิธีที่ง่ายที่สุดในการทำเช่นนี้คือการมีไฟล์กำหนดค่าหลายไฟล์ ตัวอย่างเช่น:

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/codegym/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/codegym/hibernate/multipledatabase/employee.hbm.xml"/>
   </session-factory>
</hibernate-configuration>

รหัสการเริ่มต้นไฮเบอร์เนตทั้งหมดนั้นซ้ำกันจริง ๆ :

Configuration oracleCfg = new Configuration();
oracleCfg.configure("/com/codegym/hibernate/multipledatabase/hibernate_oracle.cfg.xml");
SessionFactory oracleSessionFactory = oracleCfg.buildSessionFactory();
Session oracleSession = oracleSessionFactory.openSession();

Configuration mysqlCfg = new Configuration();
mysqlCfg.configure("/com/codegym/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");

ฐานในหน่วยความจำ

มี DBMS ซึ่งเป็นฐานข้อมูลที่อยู่ในหน่วยความจำอย่างสมบูรณ์ DBMS ดังกล่าวมักถูกแจกจ่ายในรูปแบบไลบรารีและง่ายต่อการรวมไว้ในแอปพลิเคชันทั่วไป ตัวอย่างเช่น DBMS ดังกล่าวคือ H2 หรือ Hsqldb

คุณสามารถเพิ่มลงในโปรเจ็กต์ของคุณด้วยวิธีเดียวกับไลบรารีอื่น ๆ โดยใช้การขึ้นต่อกันใน Maven:

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

และทันทีตัวอย่างของฐานที่สอง:

ฐานข้อมูล H2
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>2.1.214</version>
    <scope>test</scope>
</dependency>

คุณสามารถกำหนดค่าการทำงานกับพวกเขาในลักษณะเดียวกับฐานข้อมูลทั่วไป แต่ขอยกตัวอย่างเพื่อความสะดวก:

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>

ข้อแตกต่างที่สำคัญระหว่างสองการกำหนดค่าคือ connection.url:

ฐานข้อมูล H2
<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>
ความคิดเห็น
  • เป็นที่นิยม
  • ใหม่
  • เก่า
คุณต้องลงชื่อเข้าใช้เพื่อแสดงความคิดเห็น
หน้านี้ยังไม่มีความคิดเห็นใด ๆ