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

刚刚毕业,找了一个工作,有两周的脱岗培训时间,加上找工作时间,还有回校弄毕业事情一段时间,已经有很久没有触碰代码了,本来学框架就一知半解,这么一来,感觉框架好陌生啊,今天开始重新学习并记录下,毕竟作为一名女程序猿不能忘本。
hibernate映射配置文件用于配置与数据库表之间的映射关系,(通过配置映射关系,在启动项目的时候,hibernate就会生成相对应的数据表,但是数据库得自己建)
配置文件中的类主键和属性与数据库表是一一对应的,配置好它们之间的映射关系,就能自动生成相应的数据库表。


1 类和表的映射
映射配置文件中,hibernate-mapping标签中的class标签有一般用到两个属性,一个是name,一个是table,分别对应的是类名和数据表名,如下图:
这里写图片描述
类名要有包名,表名直接就是。有一个schema属性,是设置数据库的,但是会在hibernate的系统配置文件中设置,所以不需要再设置。


2 主键的映射
id标签中的name属性对应的是实体类中唯一标示id,column属性对应数据表中的主键id,length可设置id字段的长度。
这里写图片描述
generator标签设置主键生成策略。
(ps:①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。
这里写图片描述
或者将property中的属性写到column中去,将数据库相关属性单独配置成子元素。
这里写图片描述


4 关系的映射
实体与实体之间有很多种关系,一对一,一对多,多对多。相对应数据库表也是这样的关系,一对一就是在任意一方添加主键作为外键,一对多是添加一的主键作为外键,多对多就是新建中间表,将两表的主键作为外键。
—————————————————————————————
一对一,最经典的就是一个丈夫husband对应一个妻子wife。可在husband方添加外键。以下是简单的配置信息。
在husband映射关系配置文件中除了配置husband主键和普通属性的映射,还要配置关系映射,将wifeid作为外键,在many-to-one标签中,name对应关系wife实体类的对象名,class对应关系wife实体类的类名,column:数据库中外键字段名,unique:标识唯一性,这样many-to-one就变成了唯一的。
这里写图片描述
在wife映射关系配置文件中,one-to-one标签中name对应关系hus实体类对象名,class对应关系hus实体类的类名,property-ref:一对一关系中wife实体类的对象名。
这里写图片描述


一对多,就是一个部门dept对应多个员工emp。部门dept包含员工emp的集合。
一对多关系中一方包含有多方的集合,因此要在配置文件中描述多方的数据集合。
在dept映射关系配置文件中除了配置主键和普通属性的映射关系,还要配置部门dept和员工emp一对多的关系,在class配置中设置set集合与实体类中的set集合对应,在set标签中添加一对多的关系,其中name对应部门dept关联关系集合的属性名,table对应关联集合元素对应的表名,inverse为true表示放弃维护关系能力,lazy表示控制关联数据延迟加载,key标签中column对应关联表(t_emp)指向本表的外键字段名,one-to-many标签中的class对应关联集合中元素的类型。
这里写图片描述
在emp映射关系配置文件中,many-to-one标签中name对应的是关联关系的属性名,class对应关联属性类型,column:本实体类(Emp)对应表(t_emp)中指向关联表(t_dept)中的外键字段名。
这里写图片描述


多对多,是多个老师teacher对应多个学生student。
通过建立中间表来实现多对多关系。
在student映射关系配置文件中,除了配置student的主键和普通属性的映射关系,还要配置与老师teacher的多对多关系映射,set标签表名当前实体对应多个数据的关系,其中name对应关联关系的属性名,table是对应关系的表名,也就是中间表,fetch为join表示左外连接,key标签中的column是当前表(t_student)在中间表中的外键字段名,many-to-many中的column属性是关联表(t_teacher)在中间表中的外键字段名,class对应关联属性类型.
这里写图片描述
在teacher映射关系配置文件中,除了配置teacher的主键和普通属性的映射关系,还要配置与学生student的多对到关系映射,set标签表示当前实体对应多个数据的关系,其中name对应关联关系的属性名,table是对应关系的表名,也就是中间表,inverse为true表示放弃维护关系能力,key标签中的column是当前表(t_teacher)在中间表的外键字段名,many-to-many中的column属性是关联表(t_student)在中间表的外键字段名,class对应关联属性类型。
这里写图片描述

这篇博客写了好几天了,感觉写的好混乱(/捂脸),还想请懂得人指点指点我,那就美滋滋了。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页