MyBatis ---- 自定义映射resultMap
创始人
2024-03-16 10:43:50
0次

MyBatis ---- 自定义映射resultMap

  • 1. resultMap处理字段和属性的映射关系
  • 2. 多对一映射处理
    • a>级联方式处理映射关系
    • b>使用association处理映射关系
    • c>分布查询
  • 3. 一对多映射处理
    • a>collection
    • b>分步查询

1. resultMap处理字段和属性的映射关系

当实体类中的属性名和数据库中的属性名不一致时
在这里插入图片描述

在这里插入图片描述

    

输出时并不会报异常,而是对于属性值不一样的值,输出结果为 null
在这里插入图片描述
解决方案:

  1. 为字段起别名的方式,保证和实体类中的属性名保持一致
    

在这里插入图片描述

  1. 可以在 MyBatis 的核心配置文件中设置一个全局配置信息 mapUnderscoreToCamelCase
    
    

在这里插入图片描述

  1. 通过 resultMap 自定义映射
    

resultMap:设置自定义映射
属性:
id:表示自定义映射的唯一标识
type:查询的数据要映射的实体类的类型
子标签:
id:设置主键的映射关系
result:设置普通字段的映射关系
property:设置映射关系中实体类中的属性名
column:设置映射关系中表中的字段名

在这里插入图片描述

2. 多对一映射处理

a>级联方式处理映射关系

    

在这里插入图片描述

b>使用association处理映射关系

    

在这里插入图片描述

c>分布查询

  1. 查询员工信息
    /*** 分布查询第一步* @param eid* @return*/Emp getEmpByStepOne(@Param("eid") Integer eid);
    
  1. 根据员工所对应的部门id查询部门信息
    /*** 分布查询第二步* @param did* @return*/Dept getDeptByStepTwo(@Param("did") Integer did);
    

在这里插入图片描述

分布查询的优点:
可以实现延迟加载,但是必须在核心配置文件中设置全局配置信息:
lazyLoadingEnabled:延迟加载的全局开关。当开启时,所有关联对象都会延迟加载
aggressiveLazyLoading:当开启时,任何方法的调用都会加载该对象的所有属性。否则,每个属性会按需加载
此时就可以实现按需加载,获取的数据是什么,就只会执行相应的 sql。此时可通过 association 和 collection 中的 fetchType 属性设置当前的分步查询是否使用延迟加载,fetchType = “lazy(延迟加载)|eager(立即加载)”

lazyLoadingEnabled

    
    @Testpublic void testGetEmpAndDeptByStep(){SqlSession sqlSession = SqlSessionUtils.getSqlSession();EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);Emp empByStepOne = empMapper.getEmpByStepOne(5);System.out.println(empByStepOne.getEmpName());}

只执行第一个 sql 语句
在这里插入图片描述
aggressiveLazyLoading

开启之后,是立即加载

    

在这里插入图片描述
fetchType

fetchType 的值为 eager,为立即加载,即使全局配置中设置为延迟加载,fetchType 可以按需设置为立即加载

    

    

在这里插入图片描述

在这里插入图片描述

此时为 延迟加载

    

在这里插入图片描述

在这里插入图片描述

3. 一对多映射处理

a>collection

    /*** 查询部门中的所有员工信息* @param did* @return*/Dept getDeptEmpByDid(@Param("did") Integer did);
    

在这里插入图片描述

b>分步查询

  1. 查询部门信息
    /*** 分布查询第一步* @param did* @return*/Dept getDeptByStep(@Param("did") Integer did);
    
  1. 根据部门 id 查询部门中的所有员工
    /*** 分组查询第二步* @param did* @return*/Emp getEmpByStep(@Param("did") Integer did);
    

在这里插入图片描述

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...