Mysql是一个关系数据库,表跟表之间存在关联
1对1 1对多 多对多
1对多: 比如公司表和员工表,一个公司可以有多名员工,而一个员工只能在一个公司
多对多: 用户和角色,
用户有 吕佳伟赵赛昌 2个 角色有 总监 组长 普通员工
这个时候1个用户有多个角色 吕佳伟既是总监又是组长
同时 总监这个角色有多个用户跟他对应吕佳伟和赵赛昌都是总监 这样的表和
表之间的关系就是多对多
1对多的关系 如何维护
把1中的主键存在多的表中,在表中存了1的主键就叫做外键
Hibernate中维护的方式:
在公司中存一个员工的set集合
同时在员工中存一个公司的类
配置文件配置的方式
在多中(员工)
<many-to-one name="enterprise" class="cn.hd.bean.Enterprise"column="enterpriseId"></many-to-one>
Name 在类中的属性名
class 多的一方的类名
colum 生成外键的字段名
在1中(公司)
<set name="employeeSet"><!--bean类里的属性名-->
<key column="enterpriseId"></key><!--外键-->
<one-to-many class="cn.hd.bean.Employee"></one-to-many><!--一对多-->
</set>
Set 就是类中set name就是公司类中存储的set的变量名
Key就是外键
one-to-many 写的对应关系表中的类名
级联操作:
在保存企业的同时,将这个企业中所有员工也同时保存,这样就少写了保存的代码
关系维护:
inverse(关系维护):
true 放弃维护
false 维护(默认的值)
<set name="employeeSet" cascade="save-update" inverse="true">
原则:1对多关系 多的一方维护(员工) 1的一方放弃维护(公司)
多对多:
用户 跟 角色
配置方式
在bean类中双方都存set集合
角色
员工
角色 配置文件中的配置
<set name="userSet" table="t_user_role">
<key column="roleId"></key>
<many-to-many class="cn.hd.manyToMany.User" column="userId"></many-to-many>
</set>
Name指的是类中的属性名 table多对多的关系必须生成第三章表来维护信息 inverse关系维护控制 双方必须有一方放弃维护,否则就会报错。谁放弃?不常用的放弃
Key column 列名 在第三张表中 该字段作为外键的名字
many-to-many 中的column对应的是第三张表另外一个表中外键名字class 对应的是第三张表中的类
一般情况下,在多对多关系中,采用级联操作
员工配置文件中的配置
<set name="roleSet" table="t_user_role"inverse="true">
<key column="userId"></key>
<many-to-many class="cn.hd.manyToMany.Role" column="roleId"></many-to-many>
</set>
Name指的是类中的属性名 table多对多的关系必须生成第三章表来维护信息 inverse关系维护控制 双方必须有一方放弃维护,否则就会报错。谁放弃?不常用的放弃
Key column 列名 在第三张表中 该字段作为外键的名字
many-to-many 中的column对应的是第三张表另外一个表中外键名字class 对应的是第三张表中的类
一般情况下,在多对多关系中,采用级联操作