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);
    

在这里插入图片描述

相关内容

热门资讯

不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
报告实验.pdfbase.tt... 这个错误通常是由于找不到字体文件或者文件路径不正确导致的。以下是一些解决方法:确认字体文件是否存在:...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...