新建modules ----->resultMap
t_emp表:
SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for t_emp -- ---------------------------- DROp TABLE IF EXISTS `t_emp`; CREATE TABLE `t_emp` ( `emp_id` int(0) NOT NULL AUTO_INCREMENT, `emp_name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `age` int(0) NULL DEFAULT NULL, `gender` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `dept_id` int(0) NULL DEFAULT NULL, PRIMARY KEY (`emp_id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of t_emp -- ---------------------------- INSERT INTO `t_emp` VALUES (1, '张三', 18, '男', 1); INSERT INTO `t_emp` VALUES (2, '李四', 19, '男', 2); INSERT INTO `t_emp` VALUES (3, '王五', 20, '女', 1); INSERT INTO `t_emp` VALUES (4, '赵六', 21, '男', 3); SET FOREIGN_KEY_CHECKS = 1;
t_dept表:
SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for t_dept -- ---------------------------- DROP TABLE IF EXISTS `t_dept`; CREATE TABLE `t_dept` ( `dept_id` int(0) NOT NULL AUTO_INCREMENT, `dept_name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, PRIMARY KEY (`dept_id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of t_dept -- ---------------------------- INSERT INTO `t_dept` VALUES (1, 'A'); INSERT INTO `t_dept` VALUES (2, 'B'); INSERT INTO `t_dept` VALUES (3, 'C'); INSERT INTO `t_dept` VALUES (4, 'D'); SET FOREIGN_KEY_CHECKS = 1;
8.1、resultMap处理字段和属性的映射关系 使用全局配置处理字段名和属性名不一致的问题
private Integer empId;
private String empName;
private Integer age;
private String gender;
使用resultMap处理字段名和属性名不一致的问题
8.2、多对一映射处理 8.2.1、级联方式处理映射关系
Emp中添加dept
private Dept dept;
@Test
public void testGetEmpAndDeptByEmpId(){
SqlSession sqlSession = sqlSessionUtil.getSqlSession();
EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
Emp empById = mapper.getempAndDeptByEmpId(1);
System.out.println(empById);
}
8.2.2、使用association处理映射关系
8.2.3、分步查询
EmpMapper接口
//分步查询(1)①查询员工信息
Emp getempAndDeptByStepOne (@Param("empId") Integer empId);
DeptMapper接口
//分步查询(2)②根据员工所对应的部门id查询部门信息
Dept getEmpAndDeptByStepTwo(@Param("deptId") Integer deptId);
EmpMapper.xml
DeptMapper.xml
测试
@Test
public void testGetEmpAndDeptByStep(){
SqlSession sqlSession = sqlSessionUtil.getSqlSession();
EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
Emp emp = mapper.getempAndDeptByStepOne(2);
System.out.println(emp);
}
延迟加载
分步查询的优点:可以实现延迟加载
但是必须在核心配置文件中设置全局配置信息:
lazyLoadingEnabled:延迟加载的全局开关。当开启时,所有关联对象都会延迟加载
aggressiveLazyLoading:当开启时,任何方法的调用都会加载该对象的所有属性。否则,每个属性会按需加载
此时就可以实现按需加载,获取的数据是什么,就只会执行相应的sql。此时可通过association和collection中的fetchType属性设置当前的分步查询是否使用延迟加载, fetchType=“lazy(延迟加载)|eager(立即加载)”
测试:
@Test
public void testGetEmpAndDeptByStep(){
SqlSession sqlSession = sqlSessionUtil.getSqlSession();
EmpMapper mapper = sqlSession.getMapper(EmpMapper.class);
Emp emp = mapper.getempAndDeptByStepOne(2);
System.out.println(emp.getEmpName());
}
fetchType:在开启了延迟加载的环境中,通过该属性设置当前的分步查询是否使用延迟加载
fetchType="lazy(延迟) | eager(立即加载)"
8.3、一对多映射处理 8.3.1、collection
Dept类增加属性:
private Listemps;
//查询部门以及部门中员工的信息
Dept getDeptAndEmpByDeptId(@Param("deptId") Integer deptId);
测试
@Test
public void testGetDeptAndEmpByDeptId(){
SqlSession sqlSession = sqlSessionUtil.getSqlSession();
DeptMapper mapper = sqlSession.getMapper(DeptMapper.class);
Dept deptAndEmpByDeptId = mapper.getDeptAndEmpByDeptId(1);
System.out.println(deptAndEmpByDeptId);
}
8.3.2、分步查询
Dept
private Listemps;
DeptMapper
//分步查询(1)查询部门以及部门中的员工
Dept getDeptAndEmpByStepOne(@Param("deptId") Integer deptId);
EmpManner
//分步查询(2)查询部门以及部门中的员工
List getDeptAndEmpByStepTwo(@Param("deptId") Integer deptId);
!--ListgetDeptAndEmpByStepTwo(@Param("deptId") Integer deptId);-->
测试
@Test
public void testGetDeptAndEmpByStep(){
SqlSession sqlSession = sqlSessionUtil.getSqlSession();
DeptMapper mapper = sqlSession.getMapper(DeptMapper.class);
Dept deptAndEmpByStepOne = mapper.getDeptAndEmpByStepOne(1);
System.out.println(deptAndEmpByStepOne);
}



