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

在这里插入图片描述

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...