Hibernate<二> 映射基礎 單個持久類與單個數據庫表映射

1、單個持久化類與單個數據庫表映射基礎java

一、在Hibernate應用中,持久化類的訪問方法有兩個調用者:(默認的持久化類要有默認的構造函數、setXX、getXXX方法)
sql

①、Java應用程序:調用User對象的getXXX方法,讀取User信息。調用setXXX方法,把用戶輸入的user信息寫入到user對象中。數據庫

②、Hibernate:調用User對象的getXXX方法,讀取user信息,把它保存到數據庫調用user對象的setXXX方法,把從數據庫中讀出的user信息寫入到user對象中。Hibernate的session在執行save()、update()、saveorupdate()方法時會調用user的getXXX方法,當session執行get() load()find()方法時會調用user對象的setXXX方法。Java應用程序不能訪問持久化類的private類型的getXXX方法和setXXX方法,而hibernate沒有這個限制。session

二、Hibernate訪問持久化類屬性的策略函數

在對象-關係映射文件中,<property>元素的access屬性用於指定Hibernate訪問持久化類屬性的方式:spa

①、property:默認值,代表Hibernate經過相應的setXXX()和getXXX()方法訪問持久化類屬性的。推薦方式。hibernate

②、field:代表Hibernate運用java反射機制直接訪問類的屬性。code

三、當持久化類的屬性與數據庫表中的字段不匹配時處理方法:orm

例如:    持久化類以下:xml

public class User{
    private String firstName;
    private String lastName;
}

而數據庫表中字段爲name。當Hibernate從數據庫中取得user表的name字段後,會調用setName()方法,此時應該讓Hibernate經過setName()方法 來自動設置fistname屬性和latname屬性、此時持久化類以下:

public class User{
    private String firstName;
    private String lastName;
    public String getName(){
        return firstName+" "+lastName; 
    }
    public String setName(String name){
        StringTokenizer t=new StringTokenizer(name);
        firstName=t.nextToken();
        lastName=t.nextToken();
    }
}

在對象-關係映射文件User.hbm.xml中,無需映射User類的firstName和lastName屬性,而是映射name屬性

<property name="name" column="name" />

另外,<property>元素的formula屬性指定一個sql表達式,該表達式能夠引用表的字段,例如

<property name="totoalPirce" formula="basePrice * Count">

四、控制insert和update語句:

    Hibernate在初始化階段,就會根據映射文件的映射信息,爲全部持久化類預約義sql語句:

insert,例如user類:insert into user(id,username,order_number) values(?,?,?)

update語句、delete語句、select語句

用於控制insert和update語句的映射屬性:

<property>元素的insert:若是爲false,代表該字段永遠不能被插入,默認爲true。

<property>元素的update:若是爲false,代表該字段永遠不會被更新,默認爲true。

<property>元素的dynamic-insert:若是爲true,表示當保存一個對象時,會動態生成insert語句,只有這個字段不爲null,纔會把它包含到insert語句中。默認爲false。

<property>元素的dynamic-update:若是爲true,表示當更新一個對象時,會動態生成update語句,只有改字段取值有變化,纔會把他包含到update語句中,默認爲false。

<class>元素的dynamic-insert:   等價於全部的<property>元素的dynamic-inser屬性爲true。

<class>元素的dynamic-update:

<class>元素的Mutable屬性:若爲false,等價於全部的<property>元素的update屬性爲false,代表整個實例不能被更新,默認爲true。

五、設置類的包名

相關文章
相關標籤/搜索