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。
五、設置類的包名