Customer.hbm.xml
基本的參數都在里面了
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- 配置表與實體對象的關系 -->
<!-- package屬性:填寫一個包名.在元素內部凡是需要書寫完整類名的屬性,可以直接寫簡答類名了. -->
<hibernate-mapping package="com.legend.domain" >
<!--
class元素: 配置實體與表的對應關系的
name: 完整類名
table:數據庫表名
-->
<class name="Customer" table="cst_customer" >
<!-- id元素:配置主鍵映射的屬性
name: 填寫主鍵對應屬性名
column(可選): 填寫表中的主鍵列名.默認值:列名會默認使用屬性名
type(可選):填寫列(屬性)的類型.hibernate會自動檢測實體的屬性類型.
每個類型有三種填法: java類型|hibernate類型|數據庫類型
not-null(可選):配置該屬性(列)是否不能為空. 默認值:false
length(可選):配置數據庫中列的長度. 默認值:使用數據庫類型的最大長度
-->
<id name="cust_id" >
<!-- generator:主鍵生成策略,就是每條記錄錄入時,主鍵的生成規則
identify:主鍵自增,由數據庫來維護主鍵值,錄入時不需要指定主鍵
increment(了解):主鍵自增,由hibernate來維護,每次插入錢會先查詢表中id最大值+1作為新主鍵值
hilo(了解):高低位算法,主鍵自增,由hibernate來維護開發式不使用
native:自動三選一策略
sequence:Oracle中的主鍵生成策略
-->
<generator class="native"></generator>
</id>
<!-- property元素:除id之外的普通屬性映射
name: 填寫屬性名
column(可選): 填寫列名
type(可選):填寫列(屬性)的類型.hibernate會自動檢測實體的屬性類型.
每個類型有三種填法: java類型|hibernate類型|數據庫類型
not-null(可選):配置該屬性(列)是否不能為空. 默認值:false
length(可選):配置數據庫中列的長度. 默認值:使用數據庫類型的最大長度
-->
<property name="cust_name" column="cust_name" >
<!-- <column name="cust_name" sql-type="varchar" ></column> -->
</property>
<property name="cust_source" column="cust_source" ></property>
<property name="cust_industry" column="cust_industry" ></property>
<property name="cust_level" column="cust_level" ></property>
<property name="cust_linkman" column="cust_linkman" ></property>
<property name="cust_phone" column="cust_phone" ></property>
<property name="cust_mobile" column="cust_mobile" ></property>
<!-- 集合,一對多關系,在配置文件中配置 -->
<!--
name 屬性:集合屬性名
column屬性:外鍵列名
class屬性:與我關聯的對象完整類名
-->
<!--
級聯操作:cascade
save-update 級聯保存更新
delete:級聯刪除
all:級聯更新和級聯刪除 上面兩個
級聯操作:簡化操作,為了少寫兩行海代碼
-->
<!--
inverse 屬性:配置關系是否維護
true:customer不維護關系
false(默認值):customer維護關系
inverse屬性:性能優化,提高關系維護的性能提高運行效率
原則:無論怎么放棄,總有一方必須要維護
在一對多關系中:一的一方放棄,也只能一的一方放棄,多的一方不能放棄
-->
<!--
fetch屬性:決定加載策略,使用什么類型的sql語句加載集合數據
select(默認):單表查詢加載
join:使用多表查詢加載集合
subselect:使用自查詢加載集合
-->
<!--
lazy屬性:決定是否延遲加載
true:延遲加載
false:立即加載
extra:極其懶惰
fetch屬性:決定加載策略
-->
<set name="linkMens" lazy="true" fetch="select">
<key column="lkm_cust_id"></key>
<one-to-many class="LinkMan"/>
</set>
<!--
<set name="linkMens" inverse="true" cascade="save-update">
<key column="lkm_cust_id"></key>
<one-to-many class="LinkMan"/>
</set>
-->
<!-- 測試級聯刪除 -->
<!--<set name="linkMens" cascade="delete">
<key column="lkm_cust_id"></key>
<one-to-many class="LinkMan"/>
</set>-->
</class>
</hibernate-mapping>
User.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- 配置對象與實體之間的關系 -->
<hibernate-mapping package="com.legend.domain">
<!-- 配置數據表 -->
<class name="User" table="sys_user">
<!-- 配置主鍵的生成策略 -->
<id name="user_id">
<generator class="native"></generator>
</id>
<!-- 配置其他列 -->
<property name="user_code"></property>
<property name="user_name"></property>
<property name="user_password"></property>
<property name="user_state"></property>
<!-- 配置多對多關系 表達集合屬性 -->
<!--
name屬性:集合屬性名
table屬性:配置中間表名
key
| column:外鍵,別人飲用我的外鍵列名
class:我與那個類是多對多關系
column:外鍵,我引用別人的外鍵列名
-->
<!--
cascade級聯操作:
save-update:級聯保存更新
delete:級聯刪除
all:
結論:cascade簡化代碼書寫,該屬性使不使用都無所謂
如果使用delete操作太過危險,尤其在多對多中,
建議使用save-update 建議不用手寫
-->
<set name="roles" table="sys_user_role" cascade="save-update">
<!-- 被引用的外鍵名字 -->
<key column="user_id"></key>
<many-to-many column="role_id" class="Role"/>
</set>
</class>
</hibernate-mapping>