网络

教育改变生活

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1211|回复: 0
打印 上一主题 下一主题

hibernate映射配置文件(xxx.hbm.xml)内容及作用

[复制链接]

960

主题

964

帖子

3589

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3589
跳转到指定楼层
楼主
发表于 2019-12-10 23:16:02 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
hibernate映射配置文件用于配置与数据库表之间的映射关系,(通过配置映射关系,在启动项目的时候,hibernate就会生成相对应的数据表,但是数据库得自己建)
配置文件中的类主键和属性与数据库表是一一对应的,配置好它们之间的映射关系,就能自动生成相应的数据库表。
1 类和表的映射
映射配置文件中,hibernate-mapping标签中的class标签有一般用到两个属性,一个是name,一个是table,分别对应的是类名和数据表名,如下图:
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml10152\wps1.jpg
类名要有包名,表名直接就是。有一个schema属性,是设置数据库的,但是会在hibernate的系统配置文件中设置,所以不需要再设置。
2 主键的映射
id标签中的name属性对应的是实体类中唯一标示id,column属性对应数据表中的主键id,length可设置id字段的长度。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml10152\wps2.jpg
generator标签设置主键生成策略。
assigned:由程序员提供,无类型限制,无法确保唯一性。
uuid:由hibernate提供,类型必须是字符型 ,能确保唯一性。
increment:由hibernate提供,类型必须是数值型,有并发风险。先去数据库表查询表中id最大值:select max(id) from t_user,在该结果的基础上+1
sequence:只能用于提供序列支持的数据库,如:oracle
native:本地生成策略,依赖数据库特性。)
3 属性和字段的映射
这是普通属性和普通字段的关系。
property标签中,name对应实体类中的属性,
type对应的是该属性在数据库中字段(列)的类型,如果不填,默认为属性name对应属性的类型,如:数据库表字段名、长度、类型都和属性password保持一致,
not-null对应数据库中的不为空,非空约束,
unique对应的是唯一性,唯一约束,
column对应的是数据库表对应的字段名,如果不填,该字段默认为属性name对应属性的名字,如:该字段名是password,是birthday,是salary
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml10152\wps3.jpg
或者将property中的属性写到column中去,将数据库相关属性单独配置成子元素。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml10152\wps4.jpg
4 关系的映射
实体与实体之间有很多种关系,一对一,一对多,多对多。相对应数据库表也是这样的关系,一对一就是在任意一方添加主键作为外键,一对多是添加一的主键作为外键,多对多就是新建中间表,将两表的主键作为外键。
一对一,最经典的就是一个丈夫husband对应一个妻子wife。可在husband方添加外键。以下是简单的配置信息。
husband映射关系配置文件中除了配置husband主键和普通属性的映射,还要配置关系映射,将wifeid作为外键,在many-to-one标签中,name对应关系wife实体类的对象名,class对应关系wife实体类的类名,column:数据库中外键字段名,unique:标识唯一性,这样many-to-one就变成了唯一的。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml10152\wps5.jpg
wife映射关系配置文件中,one-to-one标签中name对应关系hus实体类对象名,class对应关系hus实体类的类名,property-ref:一对一关系中wife实体类的对象名。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml10152\wps6.jpg
一对多,就是一个部门dept对应多个员工emp。部门dept包含员工emp的集合。
一对多关系中一方包含有多方的集合,因此要在配置文件中描述多方的数据集合。
dept映射关系配置文件中除了配置主键和普通属性的映射关系,还要配置部门dept和员工emp一对多的关系,在class配置中设置set集合与实体类中的set集合对应,在set标签中添加一对多的关系,其中name对应部门dept关联关系集合的属性名,table对应关联集合元素对应的表名,inversetrue表示放弃维护关系能力,lazy表示控制关联数据延迟加载,key标签中column对应关联表(t_emp)指向本表的外键字段名,one-to-many标签中的class对应关联集合中元素的类型。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml10152\wps7.jpg
emp映射关系配置文件中,many-to-one标签中name对应的是关联关系的属性名,class对应关联属性类型,column:本实体类(Emp)对应表(t_emp)中指向关联表(t_dept)中的外键字段名。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml10152\wps8.jpg
多对多,是多个老师teacher对应多个学生student
通过建立中间表来实现多对多关系。
student映射关系配置文件中,除了配置student的主键和普通属性的映射关系,还要配置与老师teacher的多对多关系映射,set标签表名当前实体对应多个数据的关系,其中name对应关联关系的属性名,table是对应关系的表名,也就是中间表,fetchjoin表示左外连接,key标签中的column是当前表(t_student)在中间表中的外键字段名,many-to-many中的column属性是关联表(t_teacher)在中间表中的外键字段名,class对应关联属性类型.
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml10152\wps9.jpg
teacher映射关系配置文件中,除了配置teacher的主键和普通属性的映射关系,还要配置与学生student的多对到关系映射,set标签表示当前实体对应多个数据的关系,其中name对应关联关系的属性名,table是对应关系的表名,也就是中间表,inversetrue表示放弃维护关系能力,key标签中的column是当前表(t_teacher)在中间表的外键字段名,many-to-many中的column属性是关联表(t_student)在中间表的外键字段名,class对应关联属性类型。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml10152\wps10.jpg

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

WEB前端

QQ|手机版|小黑屋|金桨网|助学堂  咨询请联系站长。

GMT+8, 2025-3-12 18:36 , Processed in 0.033246 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表