Hibernate基本知識(一)

1、 Hibernate的開發流程

<1>、由Domain objectàmappingàdb(官方推薦)

<2>、由DB開始,用工具生成mapping Domain object(使用很多)

<3>、由映射文件開始。

2、 Domain Object限制

<1>、默認的構造方法(必須的)

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

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

例如:

publicclass User {

intid;

    String name;

    Date birthday;

getter/setter……

}

3、 Hibernate中持久化類需要遵循四條主要的規則(對第二條的補充)

<1>、爲屬性字段聲明setter和getter方法:Hibernate默認使用protected或private的get/set方法對,字段不需要聲明爲public。

<2>、實現一個默認的無參構造方法(constructor):所有的持久化類都必須有一個默認的構造方法(可以不是public),這樣Hibernate就可以使用Constructor.newInstance()來實例化它們了。

<3>、提供一個標識屬性(identifier property):該屬性映射數據庫表的主鍵字段。該屬性可以叫任何名字,其類型可以是任何原始類型、原始類型的包裝類型、String或者Date。標識符屬性是可選的。

<4>、使用非final的類:代理是Hibernate的一個重要的功能,它依賴的條件是,持久化類要麼是非final的,要麼實現一個所有方法都聲明爲public的接口。

4、 Hibernate映射文件就是用於說明java對象與哪個表中的記錄相對應,以及java對象中的各個屬性分別對應表中的哪一列,不同性質的屬性(例如,主鍵和普通屬性)用不同的標籤來映射,如果java對象中的某個屬性不需要存儲在數據庫中,那麼在Hibernate映射文件就不需要配置這個屬性!

5、 域模型的配置文件

<?xmlversion="1.0"?>

<hibernate-mapping

    package="com.fei.hibernate.domain">

    <classname="User" table=”user”>

       <idname="id" column=”id”>

           <generatorclass="native"/>      //主鍵id是通過此標籤產生的

       </id>

       <propertyname="name"></property>

       <propertyname="birthday"/>

    </class>

</hibernate-mapping>

6、 大家也可以這麼簡單理解,由於Session可以管理多個數據庫表所對應的多個實體對象,如果要查詢id1的實體對象,Session.get()方法需要知道去從哪個數據庫表中查詢id1的記錄,所以,除了給get方法傳遞所要查詢的實體對象的id值外,還必須給get方法傳遞實體對象的類型,get方法才能知道去哪個數據庫表中進行查詢!

7、懶加載load()get()的區別:

load()方法是在加載一個對象的時候自己產生了一個本類的子類對象,所以加載的對象不可能爲null,它是在第一次使用的時候纔會去訪問數據庫。

get()方法是在訪問時直接去數據庫取數據,不會產生代理對象。

8、 save()persist()方法的區別:

save()方法是在沒有事務的時候,是先將數據插入數據庫再回滾刪除了數據;

persist()方法在沒有事務的時候,是不會將數據插入數據庫的(即不會產生insert語句),直接回滾刪除了數據。

但在有事務的時候,兩者的功能相同。

9、 evict方法和lock方法的用法:

evict方法可以將session中的某對象清除出session,如session.evict(emp)。

lock方法可以加上某種形式的鎖以便更新或讀寫,如session.lock(emp, LockMode.UPGRADE)。

merge()方法是將遊離對象變爲持久對象的方法

發佈了32 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章