Java喬曉鬆-Hibernate原理與應用入門

我是喬同學發表於2012-12-17

Hibernate原理與應用

主要內容

引入

安裝配置

基本概念和CURD

HQL和Criteria

關聯對映

繼承對映

集合對映

懶載入

快取

事務

其他

Hibernate不適合的場景

與JPA的整合(annotation方式)

最佳實踐

JDBC資料庫連線

JDBC的優點

       直接底層操作,提供了很簡單、便捷的訪問資料庫的方法,跨平臺性比較強。靈活性比較強,可以寫很複雜的SQL語句。

 

JDBC的缺點

1.因為JAVA是物件導向的,JDBC沒有做到使資料能夠物件導向的程式設計,使程式設計師的思考仍停留在SQL語句上。

2.操作比較繁瑣,很多程式碼需要重複寫很多次。

3.如果遇到批量操作,頻繁與資料庫進行互動,容易造成效率的下降。

 

引入

模型不匹配(阻抗不匹配)

       Java面嚮物件語言,物件模型,其主要概念有:繼承、關聯、多型等;資料庫是關係模型,其主要概念有:表、主鍵、外來鍵等。

解決辦法

       1使用JDBC手工轉換。

       2使用ORM(Object Relation Mapping物件關係對映)框架來解決。

Hibernate是一個開源ORM框架。

ORM全稱Object Relation Mapping,即物件關係對映。它是一種用來完成物件模型到關係模型的對映技術。

就是把應用程式中的物件資料持久化到關聯式資料庫的表的一種技術。

使用ORM( Object Relation Mapping )框架來解決。主流的ORM框架有JBoss公司的Hibernate、Oracle公司的TopLink、Apache組織的OJB、Sun公司的JDO。

 

簡單的說:ORM能利用物件導向的思想開放基於關係型資料庫的應用程式,它的主要工作是將物件資料儲存到關聯式資料庫的表中,以及將關聯式資料庫表中資料讀入到物件中。

 

安裝配置

下載地址http://www.hibernate.org,使用3.3版本。

解壓獲取必需類庫檔案

將下載目錄/hibernate3.jar和/lib下的hibernate執行時必須的包加入classpath中:

配置檔案hibernate.cfg.xml和hibernate.properties,XML和properties兩種,這兩個檔案的作用一樣,提供一個即可,推薦XML格式,下載目錄/etc下是示例配置檔案。

       可以在配置檔案指定:

       資料庫的URL、使用者名稱、密碼、JDBC驅動類、方言等。

       啟動時Hibernate會在CLASSPATH裡找這個配置檔案。

對映檔案(hbm.xml,物件模型和關係模型的對映)。在/eg目錄下有完整的hibernate示例。

快速開始小例子

步驟:

          1.新建java專案,並加入相應的jar包,及jdbc驅動。

          2.建立持久化類

          3. 準備資料庫表

          4.建立配置檔案hibernate.cfg.xml

          5.建立對映檔案xxx.hbm.xml

              6.建立測試檔案

 

Hibernate.connection.url  表示要連結的資料庫地址

Hibernate.connection.driver_class    表示要連結的資料庫的驅動類

Hibernate.connection.username     要連線的資料庫的使用者名稱

Hibernate.connection.password      要連線的資料庫的密碼

Hibernate.dialect   表示要使用的資料庫的型別

         org.hibernate.dialect.MySQL5Dialect      mysql資料庫

         org.hibernate.dialect.Oracle9Dialect        oracle資料庫

         org.hibernate.dialect.SQLServerDialect   SQLServer資料庫

hibernate.hbm2ddl.auto

         validate:載入hibernate時驗證建立表結構

         update:載入hibernate時自動更新資料庫結構,如果表存在不用建立,如果不存在就建立。

         create:每一次載入hibernate時都建立表結構

         create-drop:載入hibernate時建立,退出時刪除

基本概念和CURD

開發流程

1、由Domain object -> mapping->db。(官方推薦)

      

2、由DB開始,用工具生成mapping和Domain object。(使用較多)

 

3、由對映檔案開始。

Domain Object限制

       1、預設的構造方法(必須的)。

       2、有無意義的標示符id(主鍵)(可選)

       3、非final的,對懶載入有影響(可選)

       DomainJava Object(User)

       publicclass User {

              privateint id;

              privateString name;

              privateDate birthDay;

              //gettersetter…

}

1、xx.hbm.xml

<?xml version="1.0"?>

<hibernate-mapping package=“cn.itcast.domain">

<class name="User"table="user">

       <idname="id">

              <generatorclass="native"/>

       </id>

       <propertyname="name"/>

       <propertyname="birthday”/>

</class>

</hibernate-mapping>

物件關係對映檔案:把物件導向中的實體類物件對映到資料庫中的實體(表的記錄),把實體類之間的關聯關係也對映到資料庫中多個表之間的相互關係中。這樣,在Hibernate中對這些實體物件的操作就直接轉換為對資料庫表的記錄的操作。

1.Configuration類

   是Hibernate的入口,它負責配置並啟動Hibernate。Hibernate通過Configuration的例項載入配置檔案資訊,然後讀取指定物件關係對映檔案的內容並建立SessionFactory例項。

2.SessionFactory介面

  負責初始化Hibernate。一個SessionFactory例項對應一個資料庫。應用程式從SessionFactory中獲得Session例項。

3.Session介面

  Session被稱為持久化管理器,負責管理與持久化相關的操作:儲存、更新、刪除和載入物件。

4.Transaction介面

是Hibernate框架的事務介面。它對底層的事務介面做了封裝。包括:JDBC API和JTA。

 

Session的快取(一級快取)

Session的CRUD方法以及呼叫查詢介面的list(),iterate()方法時,如果session快取中不存在相應的物件,Hibernate就會把該物件加入到第一級快取中,如果session快取中已經存在這個物件,就不需在去資料庫載入,而直接使用快取中的物件。

    flush:進行清理快取(此時快取中的資料並不丟失)的操作,讓快取和資料庫同步執行一些列sql語句,但不提交事務,;

     commit:先呼叫flush() 方法,然後提交事務. 則意味著提交事務意味著對資料庫操作永久儲存下來。  

session的快取一般交由hibernate框架自動管理。

 


相關文章