一、一对一关联:一个员工对应一个部门
1、需求分析
(1)表之间关系
(2)需求:查询所有员工信息,关联查询所属部门信息;
(3)分析:在查询过程中,即使有的员工还没有部门也需要查询这个员工的信息,此时在查询过程中,员工表应该是主表;
2、创建实体类
(1)部门实体类(Department)
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Department {
// 部门编号
private Integer deptNo;
// 部门名称
private String deptName;
//部门地址
private String location;
//部门的员工
private List<Employee> employeeList;
}
(2)员工实体类(Employee)
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
// 定义一个Employee类
public class Employee {
// 员工编号
private Integer empNo;
// 员工姓名
private String empName;
// 私有变量:员工年龄
private Integer empAge;
// 私有变量:员工地址
private String address;
// 私有变量:员工薪水
private Double salary;
// 私有变量:员工部门
private Department department;
}
3、创建Mapper代理(dao层)
(1)EmployeeMapper.java
public interface EmployeeMapper {
// 查询所有员工
public List<Employee> finAll();
}
4、创建映射文件
(1)EmployeeMapper.xml
5、测试查询
public class CascadeTest {
private DataConnection dataConn ;
private EmployeeMapper employeeMapper;
@Before
public void before(){
try{
dataConn = new DataConnection();
SqlSession sqlSession = dataConn.getSqlSession();
employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
}catch (Exception e){
e.printStackTrace();
}
}
@Test
public void OneToOne(){
List<Employee> employeeList = employeeMapper.findAll();
System.out.println(employeeList);
}
二、一对多关联:一个部门有多个员工
1、需求分析
(1)需求:查询部门信息以及部门下面所属员工信息
(2)分析:部门和员工的信息为一对多关系,并且查询过程中,如果有的部门没有员工,此时也需要将部门信息查询出来,因此在查询中,部门表应该是主表;
2、创建Mapper代理(dao层)
(1)DepartmentMapper.java
public interface DepartmentMapper {
//查询所有部门
List<Department> findAll();
}
3、创建映射文件
(1)DepartmentMapper.xml
4、测试查询
public class CascadeTest {
private DataConnection dataConn ;
private SqlSession sqlSession;
private EmployeeMapper employeeMapper;
private DepartmentMapper departmentMapper;
@Before
public void before(){
try{
dataConn = new DataConnection();
sqlSession = dataConn.getSqlSession();
employeeMapper = sqlSession.getMapper(EmployeeMapper.class);
departmentMapper = sqlSession.getMapper(DepartmentMapper.class);
}catch (Exception e){
e.printStackTrace();
}
}
@After
public void after(){
try {
sqlSession.close();
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void OneToMany(){
List<Department> departmentList = departmentMapper.findAll();
System.out.println(departmentList);
}
}
三、多对多关联:用户和角色
1、需求分析
(1)需求:一个用户可以有多个角色,一个角色可以赋予多个用户
(2)分析:
-
用户实体类和角色实体类让用户和角色的实体类能体现出来多对多的关系各自包含对方一个集合引用
-
当我们查询用户时,可以同时得到用户所包含的角色信息
-
当我们查询角色时,可以同时得到角色的所赋予的用户信息
(3)表之间的关系:用户表,角色表让用户表和角色表具有多对多的关系。需要使用中间表,中间表需要外键引用用户表、角色表。
2、创建Mapper代理(dao层)
(1)UserMapper.java
public interface UserMapper {
public List<User> findAll();
}
3、创建映射文件
(1)UserMapper.xml
(2)RoleMapper.xml
4、测试查询
public class CascadeTest {
private DataConnection dataConn ;
private SqlSession sqlSession;
private UserMapper userMapper;
private RoleMapper roleMapper;
@Before
public void before(){
try{
dataConn = new DataConnection();
sqlSession = dataConn.getSqlSession();
userMapper = sqlSession.getMapper(UserMapper.class);
roleMapper =sqlSession.getMapper(RoleMapper.class);
}catch (Exception e){
e.printStackTrace();
}
}
@After
public void after(){
try {
sqlSession.close();
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void users(){
List<User> userList = userMapper.findAll();
System.out.println(userList);
}
@Test
public void roles(){
List<Role> roleList = roleMapper.findAll();
System.out.println(roleList);
}
}