1. 程式人生 > >Hibernate簡單入門

Hibernate簡單入門

1.MyEclipse匯入Hibernate

2.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">
<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration> <session-factory> <!--資料庫特性 --> <property name="dialect"> org.hibernate.dialect.Oracle9Dialect </property> <!--資料庫URL --> <property name="connection.url"> jdbc:oracle:thin:@localhost:1521:orcl </
property
>
<!-- 資料庫使用者 --> <property name="connection.username">SYSTEM</property> <!-- 資料庫使用者密碼 --> <property name="connection.password">orcl</property> <!-- 資料庫JDBC驅動 --> <property name="connection.driver_class"> oracle.jdbc.driver.OracleDriver </
property
>
<!-- 資料庫檢視【MyEclipse database explorer】連線資料庫時定義的名字 --> <property name="myeclipse.connection.profile">oracle</property> <!-- 執行程式時是否在控制檯顯示sql語句 --> <property name="show_sql">true</property> <!-- 是否格式化sql語句 --> <property name="format_sql">true</property> <!--jdbc.fetch_size是指Hibernate每次從資料庫中取出並放到JDBC的Statement中的記錄條數。Fetch Size設的 越大,讀資料庫的次數越少,速度越快,但記憶體佔用越多; Fetch Size越小,讀資料庫的次數越多,速度越慢,但記憶體佔用少--> <property name="jdbc.fetch_size">50 </property> <!--jdbc.batch_size是指Hibernate批量插入,刪除和更新時每次操作的記錄數。Batch Size越大,        批量操作的向資料庫傳送Sql的次數越少,速度就越快,同樣耗用記憶體就越大--> <property name="jdbc.batch_size">20 </property> <!-- 對映檔案路徑 --> <mapping resource="com/entity/Dept.hbm.xml" /> <mapping resource="com/entity/District.hbm.xml" /> <mapping resource="com/entity/House.hbm.xml" /> <mapping resource="com/entity/Users.hbm.xml" /> <mapping resource="com/entity/Street.hbm.xml" /> <mapping resource="com/entity/Types.hbm.xml" /> </session-factory> </hibernate-configuration>

3.實體對映配置

<hibernate-mapping>
    <class name="com.entity.Dept" table="DEPT" schema="SYSTEM" >
        <id name="deptno" type="java.lang.Integer">
            <column name="DEPTNO" precision="9" scale="0" />
            <!-- 使用oracle的已建立的序列自動增長  -->
            <generator class="sequence" >
                <!-- param標籤包含的是oracle的序列名 -->
                <param name="sequence">SEQ_DEPT</param>
            </generator>
            <!--  使用increment自動增長,適用於所有資料庫,先從資料庫中查詢最大的主鍵值
                     再在最大主鍵值上加1,
            -->
            <!-- <generator class="increment"/> --> 
        </id>
        <!-- 實體類Dept中的dname屬性,是String型別 -->
        <property name="dname" type="java.lang.String">
            <!-- 資料庫中的DNAME列,長度是20 -->
            <column name="DNAME" length="20" />
        </property>
        <property name="loc" type="java.lang.String">
            <column name="LOC" length="20" />
        </property>
    </class>
</hibernate-mapping>

4.簡單例子

package com.test;
 
 
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
 
import com.entity.Dept;
 
public class Test {
    public static void main(String[] args) {
        //1、解析hibernate控制檔案
        Configuration config=new Configuration().configure();
        //建立SessionFactory
        SessionFactory sf=config.buildSessionFactory();
        //3、通過SessionFactory建立Session
        Session session=sf.openSession();
        //4、建立session上的事務物件
        Transaction tx=session.beginTransaction();
         
        try {
            //插入一條資料
            Dept dept=new Dept();
            dept.setDname("333");
            dept.setLoc("test area");
            session.save(dept);
             
            //根據主鍵查詢資料
            Dept dept2=(Dept)session.get(Dept.class, 4);
            //Dept dept=(Dept)session.load(Dept.class, 4);
             
            //修改資料
            dept2.setDname("研發部");
            session.update(dept2);
             
            //刪除資料
            session.delete(dept2);
             
            //只有呼叫commit才會把資料固化到資料庫
            tx.commit();
        } catch (Exception e) {
            e.printStackTrace();
            tx.rollback();
        }finally{
            session.close();
        }
    }
}