2018.11.1 Hibernate中的Mapper关系映射文件

时间:2022-05-22 14:39:20

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>