数据库实体间关系 & java实体类间关系
在数据库中,实体间关系有1:1,1:n,n:1,m:n
在数据库中有E-R图可以解析这种关系,通过建立主键、外键、第三张关系表的方式表示这种关系
而在java实体类中我们使用成员变量来表示这种关系
关系 | 数据库表 | java实体类 |
---|---|---|
1:1(用户user-身份证信息card) | 在User表中设置主键为card(或在Card表中设置主键为user) | 在User类中添加成员变量 card(或在card类中添加成员变量user) |
1:n (部门dept-员工emp) | 在Dept表中添加emp表的主键为外键(或在Emp表中添加dept的主键为外键) | 在Dept类中添加成员变量List<Emp>(或在Emp类中添加成员变量Dept) |
n:1(员工emp-部门dept) | 在Emp表中添加dept的主键为外键(或在Dept表中添加emp表的主键为外键) | 在Emp类中添加成员变量Dept(或在Dept类中添加成员变量List<Emp>) |
m:n(学生stu-老师teacher) | 使用第三张关系表(stu主键-tea主键) | 在Teacher类中添加成员变量List<stu>(或在Stu类中添加成员变量List<teacher> |
重点在于:如何将java的实体类中的成员变量在mybatis的对象映射文件中表示
对象映射文件 (1:1)
成员变量是一个类
首先创建两张表 t_user,t_card
- User->Card(一个人对应一个身份信息)
为实现1:1关系,在User中将Card设置为成员变量
UserMapper.xml文件
- Card->User(一个身份信息对应一个人)
同理也可以将Card的成员变量设置为User(两个类设置成员变量只能选其一)
选择Card设置成员变量时,CardMapper.xml内容如下
对象映射文件 (1:n)
建表(一个部门可以有多个员工,一个员工只能有一个部门)
用部门表的主键做员工表的外键
- Emp->Dept(一个员工对应一个部门)
因为一个员工只对应一个部门,所以在员工与部门这里还是1:1的关系,所以实现联系是在emp中设定一个Dept类的成员变量
所以Xml中实现方式与1:1相同
- Dept->User(一个部门对应多个员工)
但当选择在一个部门中添加成员变量时,一个部门有多个员工,所以成员变量是一个员工集合
DeptMapper.xml
对象映射文件 (m:n)
成员变量是一个集合
建立数据表
因为是多对多的关系,使用第三张表来表示关系
-
Student->Teacher
将List<Tea>作为成员变量
StuMapper.xml
-
Teacher->Student
在Teacher类中将List<Stu>作为成员变量
TeacherMapper.xml
总结起来就两句话:
当成员变量为一个类时,在xml中设置为association
当成员变量作为一个集合时,在xml中设置为collection