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对应关联集合元素对应的表名,inverse为true表示放弃维护关系能力,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是对应关系的表名,也就是中间表,fetch为join表示左外连接,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是对应关系的表名,也就是中间表,inverse为true表示放弃维护关系能力,key标签中的column是当前表(t_teacher)在中间表的外键字段名,many-to-many中的column属性是关联表(t_student)在中间表的外键字段名,class对应关联属性类型。 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml10152\wps10.jpg
|