วันอังคารที่ 8 มกราคม พ.ศ. 2551

Config Hibernate ให้ใช้บน RAD 6.0 + Oracle แบบธรรมดา

อันนี้เป็นแบบธรรมดา ไม่ได้ใช้ Transaction ของ Websphere ในการควบคุม (แบบนี้สามารถไปใช้ บนEclipse ได้ด้วย และ Server ไหนก็ได้ครับ) และผมใช้ Datasource ด้วย
1. สร้าง Project ขึ้นมาก่อน (Web Project + Ear Project)
2. โหลด Hibernate ที่นี่ (ที่ผมใช้เป็น Hibernate 3.2 ครับ)
3. Copy Library มาใส่ที่ Project ของเรา หรือจะทำการ Add Share Library ใน Ear Project ก็ได้
4. ทำการ สร้าง HibernateUtil ขึ้นมาเพื่อเรียกใช้งาน (โดย Copy File จาก Tutorial มาใช้ได้เลยครับ)

private static final SessionFactory sessionFactory;

static {
try {
// Create the SessionFactory from hibernate.cfg.xml
sessionFactory = new Configuration().configure("WEB-INF/hibernate.cfg.xml").buildSessionFactory(); //อันนี้ผมอ้างที่อยู่ของ File Config ว่าอยู่ที่ไหน
} catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}

public static SessionFactory getSessionFactory() {
return sessionFactory;// ที่เราจะเอาไปใช้งาน
}

5. ต่อไปก็สร้าง hibernate.cfg.xml ซึ่งไว้สำหรับ Config ของ Hibernate

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

<session-factory>

<!-- Database connection settings -->

<property name="hibernate.connection.datasource">jdbc/spag</property> //Config Datasource ที่เราใช้งาน

<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>

<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.Oracle9Dialect</property> //เลือกเป็น Oracle 9i

<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>

<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>

<mapping resource="com/test/hibernate/model/GeneralParamM.hbm.xml"/> //Config Table ที่เราใช้งาน

</session-factory>

</hibernate-configuration>

6. ต่อไปเราสร้าง Config ของ Table โดยผมจะสร้างไว้ที่ com.test.hibernate.model ครับชื่อ ไฟล์ GeneralParamM.hbm.xml ซึ่งพวกนี้ผม Config ไว้ใน hibernate.cfg.xml ตามบรรทัดข้างล่างสุด


<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>


<class name="com.test.hibernate.model.GeneralParamM" table="GENERAL_PARAM"> //บอกว่าใช้ Class ไหน Mapping กับ Table ไหน
<id name="paramCode" column="PARAM_CODE"> //บอกว่าเป็น Primary Key
<generator class="assigned"/>//บอกว่าใช้แบบ Assign ค่าลงไปเอง
</id>
<property name="paramValue" column="PARAM_VALUE"/>
<property name="labelName" column="LABEL_NAME"/>
<property name="editableFlag" column="EDITABLE_FLAG"/>
</class>


</hibernate-mapping>

7. พอสร้างทั้งหมดเสร็จแล้ว เราก็มาลองเรียกมันดูโดย


SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session sessionHibernate = sessionFactory.openSession(); //เปิด Session ไว้ใช้งาน
Criteria criteria = sessionHibernate.createCriteria(GeneralParamM.class);
criteria.add(Restrictions.eq("paramCode",)); //ใส่ค่าที่เราต้องการหา

List result = criteria.list();

sessionFactory.close(); //ปิด Session จำเป็นต้องปิทุกครั้งนะครับ

8. พอสั่งรันเสร็จ มันก็จะดึงค่าจาก Table ขึ้นมาให้ครับ (ตรวจสอบ SystemOut.log ด้วยว่า Error หรือเปล่า) อันนี้เป็ฯแบบง่ายๆ นะครับ

หมายเหต
1. อาจจะมีปัญหาพอดึงค่าแล้วสั่งปิด ไปค่าที่ได้ไม่มาเกิด Exception นะครับ
2. ถ้าใช้วิธีนี้จะต้องปิดทุกครั้งที่เลิกใช้งาน ไม่งั้น Session จะค้าง