Mysql是一个关系型数据库 表跟表之间存在关联
一对一 一对多 多对多
一对多:
一个公司可以有 多名员工 而 一名只能对应 一个公司 这样的关系就是
再比如用户和角色
用户有 A B两个 角色有 总监 小组长 普通
这个时候一个用户 有多个角色 A即是 总监 也会小组长
同时 总监这个角色 有多个用户 跟他对应 A和B都是总监 这样的表和表之间的关系就是多对多的关系
一对多的关系 如何 维护
把一中的主键存在多的表中,在多中 存了一的主键 就叫做外键
Hibernate中维护的方式:
再公司中存一个 员工的set集合
同时在员工中存一个公司类
在员工里面存一个类型
再公司里面存了一个集合
配置文件配置的方式
在 多中(职工)要配置个属性
Name在类的属性名 class 多的一方的类名 column生成外键的字段
在一中(公司中)
<set name="employeeSet">
<key column="enterpriseId"></key>
<one-to-many class="cn.hd.bean.Employee"></one-to-many>
</set>
Set就是类中的 set name 就是公司存储的set的变量名
Key就是外键 one-to-many 写的对应关系表中的类名
级联操作
在保存企业的同时 将这个企业中的所有职工也同时保存 这样少写了两行代码
<!--
cascade:就是级联操作 为了减少代码
save-update 级联保存
delete 级联删除 (不推荐 不安全)
all 既有保存也有删除(不推荐 不安全)
-->
<set name="employeeSet" cascade="save-update">
关系维护
<!--
inverse 关系维护
true 放弃维护
false 维护(默认)
-->
<set name="employeeSet" cascade="save-update" inverse="true">
原则:一对多关系中 多的一方维护 一的一方发放弃维护
多对多
用户 跟角色
配置方式
在bean 中双方都存在 set集合
配置文件
<setname="userSet" table="t_user_role" >
<key column="roleId"></key>
<many-to-manyclass="cn.hd.manyToMany.User"column="userId"></many-to-many>
</set>
Name 指的是类中的属性名 table 多对多的关系必须生成第三张表维护信息 inverse 关系维护 控制 双方必须 由一方 放弃维护 否则就会报错 谁放弃?不常用的放弃
Key column列名在第三张表中该字段作为外键的名字
Many-to-many column 对应的是第三张 表另外一个表中的外键名字
Class 对应的是第三张表中的类
一般情况下,在多对多关系中 采用级联操作