hibernate.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="cn.itcast.domain">
<!--
class元素: 配置实体与表的对应关系的
name: 完整类名
table:数据库表名
-->
<class name="Customer" table="cst_customer" lazy="true" >
<!-- id元素:配置主键映射的属性
name: 填写主键对应属性名
column(可选): 填写表中的主键列名.默认值:列名会默认使用属性名
type(可选):填写列(属性)的类型.hibernate会自动检测实体的属性类型.
每个类型有三种填法: java类型|hibernate类型|数据库类型
not-null(可选):配置该属性(列)是否不能为空. 默认值:false
length(可选):配置数据库中列的长度. 默认值:使用数据库类型的最大长度
-->
<id name="cust_id" column="cust_id">
<!-- generator:主键生成策略,就是每条记录录入时,主键的生成规则.(7个)
identity:主键自增,由数据库来维护主键值,录入时不需要指定主键
sequence:Oracle中的主键生成策略.
increment(了解):主键自增,由hibernate来维护,每次插入前先查询表中id最大值,+1作为新主键值
hilo:高低位算法.主键自增,由hibernate来维护,开发时不使用.
native:hilo+sequence+identity 自动三选一策略.
uuid:产生随机字符串作为主键.
assigned:自然主键生成策略.hibernate不会管理主键值,由开发人员自行维护.
-->
<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:save-update+delete
级联操作:简化操作.目的少写两行代码.
-->
<!-- inverse属性:配置关系是否维护
true:customer不维护关系
false:customer维护关系
inverse属性:性能优化,提高关系维护的性能
原则:无论怎么放弃,总有一方必须要维护关系.
一对多关系中:一的一方放弃,也只能一的一方放弃,多的一方不能放弃
-->
<!--
lazy属性:决定是否延迟加载
true(默认值):延迟加载
false:立即加载
extra:极其懒惰
fetch属性:决定加载策略,使用什么类型的sql语句加载集合数据
select(默认值):单表查询加载
join:使用多表查询加载集合
subselect:使用子查询加载集合
-->
<!-- batch-size:抓取集合的数量为3.
抓取客户的集合时,一次抓取几个客户的联系人集合
-->
<set name="linkMen">
<key column="lkm_cust_id"></key>
<one-to-many class="LinkMan"/>
</set>
</class>
</hibernate-mapping>
<?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="cn.itcast.domain">
<!--
class元素: 配置实体与表的对应关系的
name: 完整类名
table:数据库表名
-->
<class name="LinkMan" table="cst_linkman">
<!-- id元素:配置主键映射的属性
name: 填写主键对应属性名
column(可选): 填写表中的主键列名.默认值:列名会默认使用属性名
type(可选):填写列(属性)的类型.hibernate会自动检测实体的属性类型.
每个类型有三种填法: java类型|hibernate类型|数据库类型
not-null(可选):配置该属性(列)是否不能为空. 默认值:false
length(可选):配置数据库中列的长度. 默认值:使用数据库类型的最大长度
-->
<id name="lkm_id">
<!-- generator:主键生成策略,就是每条记录录入时,主键的生成规则.(7个)
identity:主键自增,由数据库来维护主键值,录入时不需要指定主键
sequence:Oracle中的主键生成策略.
increment(了解):主键自增,由hibernate来维护,每次插入前先查询表中id最大值,+1作为新主键值
hilo:高低位算法.主键自增,由hibernate来维护,开发时不使用.
native:hilo+sequence+identity 自动三选一策略.
uuid:产生随机字符串作为主键.
assigned:自然主键生成策略.hibernate不会管理主键值,由开发人员自行维护.
-->
<generator class="native"></generator>
</id>
<!-- property元素:除id之外的普通属性映射
name: 填写属性名
column(可选): 填写列名
type(可选):填写列(属性)的类型.hibernate会自动检测实体的属性类型.
每个类型有三种填法: java类型|hibernate类型|数据库类型
not-null(可选):配置该属性(列)是否不能为空. 默认值:false
length(可选):配置数据库中列的长度. 默认值:使用数据库类型的最大长度
-->
<property name="lkm_gender">
<!-- <column name="cust_name" sql-type="varchar" ></column> -->
</property>
<property name="lkm_name"></property>
<property name="lkm_phone"></property>
<property name="lkm_mobile"></property>
<property name="lkm_email"></property>
<property name="lkm_qq"></property>
<property name="lkm_position"></property>
<property name="lkm_memo"></property>
<!-- 多对一 -->
<!--
name属性:引用属性名
column属性:外键列名
class属性:与我关联的对象完整类名
-->
<!--
级联操作:cascade
save-update:级联保存更新
delete:级联删除
all:save-update+delete
级联操作:简化操作.目的少写两行代码.
-->
<!-- 多的一方:不能放弃维护关系的,外键字段就在多的一方. -->
<!--
lazy属性:决定是否延迟加载
proxy(默认值):由customer的类级别加载策略决定.
false:立即加载
fetch属性:决定加载策略,使用什么类型的sql语句加载集合数据
select(默认值):单表查询加载
join:使用多表查询加载集合
-->
<many-to-one name="customer" column="lkm_cust_id" class="Customer"></many-to-one>
</class>
</hibernate-mapping>