当前位置: 首页 > news >正文

mybatis resultMap标签注意事项(pageHelper结合使用的坑)

背景

使用pageHelper时,发现分页数据异常,经过排查发现是resultMap 的问题。

resultMap介绍

在使用mybatis时,我们经常会使用在xml文件中编写一些复杂的sql语句,例如多表的join,在映射实体类时,又会使用到resultMap,将查询的数据库字段与实体类字段进行映射对照。

resultMap 元素是 MyBatis 中最重要最强大的元素。它可以让你从 90% 的 JDBC ResultSets 数据提取代码中解放出来,并在一些情形下允许你进行一些 JDBC 不支持的操作。实际上,在为一些比如连接的复杂语句编写映射代码的时候,一份 resultMap 能够代替实现同等功能的数千行代码。ResultMap 的设计思想是,对简单的语句做到零配置,对于复杂一点的语句,只需要描述语句之间的关系就行了。

举例

当我们编写了一个非常复杂的resultMap时,例如如下。

<!-- 非常复杂的结果映射 -->
<resultMap id="detailedBlogResultMap" type="Blog"><constructor><idArg column="blog_id" javaType="int"/></constructor><result property="title" column="blog_title"/><association property="author" javaType="Author"><id property="id" column="author_id"/><result property="username" column="author_username"/><result property="password" column="author_password"/><result property="email" column="author_email"/><result property="bio" column="author_bio"/><result property="favouriteSection" column="author_favourite_section"/></association><collection property="posts" ofType="Post"><id property="id" column="post_id"/><result property="subject" column="post_subject"/><association property="author" javaType="Author"/><collection property="comments" ofType="Comment"><id property="id" column="comment_id"/></collection><collection property="tags" ofType="Tag" ><id property="id" column="tag_id"/></collection><discriminator javaType="int" column="draft"><case value="1" resultType="DraftPost"/></discriminator></collection>
</resultMap>

请把你的目光聚集到collection标签上,对应Java 实体类属性为List posts;
有两张表 blog 和 post, 一对多的关系。
一个blog 博客,可以用多篇post文章。
我们查询博客以及文章,并且装配到统一个实体类中。

select blog.*,post.title,post.status from  blog left join post using(post_id);

假设查询到5条数据,两个博客,分别对应的1、4篇文章。那么被resultMap映射过会得到一个拥有两个元素的集合,文章数据被封装到对应的集合属性中。

但是如果我们在sql最后加入 limi 2, 这样查到的分页数据就是不准确的了。
查出来还是两个元素的集合,但是第二个元素的posts 属性却只有一篇文章,和我们预期严重不符合
会出现各种情况,posts属性数据不完整,或者是其他数据不正确的情况。

结论

所以当我们需要使用resultMap + collection来进行复杂映射时,慎重使用 limit 关键字,以及一些插件(pageHelper)

相关文章:

mybatis resultMap标签注意事项(pageHelper结合使用的坑)

背景 使用pageHelper时&#xff0c;发现分页数据异常&#xff0c;经过排查发现是resultMap 的问题。 resultMap介绍 在使用mybatis时&#xff0c;我们经常会使用在xml文件中编写一些复杂的sql语句&#xff0c;例如多表的join&#xff0c;在映射实体类时&#xff0c;又会使用…...

100种算法【Python版】第33篇——Tonelli-Shanks算法

本文目录 1 模素数下的二次剩余问题2 算法原理2.1 背景知识2.2 算法步骤3 算法示例4 python代码5 算法应用1 模素数下的二次剩余问题 在数论中,给定一个素数 p p p 和一个整数 n n n...

深度学习基础知识-全连接层

全连接&#xff08;Fully Connected&#xff0c;简称 FC&#xff09;层是深度学习神经网络中一种基本的层结构。它主要用于神经网络的最后几层&#xff0c;将高层特征映射到输出空间中。全连接层对数据的每个输入节点与每个输出节点进行连接&#xff0c;用于实现输入特征和输出…...

ffmpeg 提取mp4文件中的音频文件并保存

要从一个 MP4 文件中提取音频并保存为单独的音频文件&#xff0c;可以使用 ffmpeg 工具。以下是一个简单的命令示例&#xff1a; 命令格式 ffmpeg -i input.mp4 -vn -acodec copy output.mp3 参数解释 -i input.mp4: 指定输入文件为 input.mp4。 -vn: 禁用视频流&#xff0…...

【MySQL 保姆级教学】 复合查询--超级详细(10)

复合查询 1. 复合查询的作用2. 创建将进行操作的表2.1 员工表 emp2.2 部门表 dept2.3 薪资等级表 3. 基本查询回顾4. 多表查询4.1 多表查询的定义4.2 笛卡尔积4.3 内连接 inner join4.4 交叉连接 cross join4.5 左外连接 left join4.6 右外连接 right join4.7 自连接 5. 子查询…...

ONLYOFFICE:数字化办公的创新解决方案与高效协作平台

目录 前言—— 关于 ONLYOFFICE 桌面编辑器 1.首页介绍 2.电子表格 功能介绍 适用场景 3.ONLYOFFICE 在线Word功能 4.ONLYOFFICE 在线PPT功能 5.共同办公室 6.探索其他 总结 前言—— 在数字化办公的时代&#xff0c;传统的办公软件常常让人感到束缚与低效。而 ONLY…...

编译Kernel时遇到“error: ‘linux/compiler_types.h‘ file not found“的解决方法

问题描述&#xff1a; 在下载了一份安卓13项目的代码后进行make bootimage编译时遇到了下面编译报错&#xff1a; In file included from /home/bspuser/scode/kernel/msm-4.19/include/uapi/linux/stat.h:5: In file included from /home/bspuser/scode/kernel/msm-4.19/inc…...

开发之翼:划时代的原生鸿蒙应用市场开发者服务

前言 随着"纯血鸿蒙" HarmonyOS NEXT在原生鸿蒙之夜的正式发布&#xff0c;鸿蒙生态正以前所未有的速度蓬勃发展。据知已有超过15000个鸿蒙原生应用和元服务上架&#xff0c;覆盖18个行业&#xff0c;通用办公应用覆盖全国3800万多家企业。原生鸿蒙操作系统降低了接…...

代码随想录一刷——1.两数之和

当我们需要查询一个元素是否出现过&#xff0c;或者一个元素是否在集合里的时候&#xff0c;就要第一时间想到哈希法。 C&#xff1a; unordered_map class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { unordered_map<int…...

vue自定义组件实现v-model双向数据绑定

一、Vue2 实现自定义组件双向数据绑定 ① v-model 实现双向数据绑定 在vue2中&#xff0c;子组件上使用v-model的值默认绑定到子组件的props.value属性上&#xff0c;由于子组件不能改变父组件传来的属性&#xff0c;所以需要通过$emit触发事件使得父组件中数据的变化&#xf…...

excel指定单元格输入相同的值,比如给D1~D10000输入现在的值

注意&#xff0c;一点不用用WPS&#xff0c;不然运行宏是会报&#xff1a;Droiact-Module1,第1行等Λ列语法错误: Unexpected identifier 步骤 1&#xff0c;altF11打开宏 2&#xff0c;输入脚本 3&#xff0c;点击运行按钮 成功后会看看到...

中国最强乳企伊利,三个季度净赚超百亿

伊利三季度的业绩完全超出了市场预期。 在一个飞天茅台都在不断跌价的消费趋势里&#xff0c;伊利三季度扣非净利润的同比增幅达到13.4%。大部分机构和投资者&#xff0c;都没料到伊利这一次的表现如此强悍。这一次&#xff0c;伊利在“大气层”。 并且&#xff0c;伊利前三季…...

SpringBoot源码解析(二):启动流程之引导上下文DefaultBootstrapContext

SpringBoot源码系列文章 SpringBoot源码解析(一)&#xff1a;启动流程之SpringApplication构造方法 SpringBoot源码解析(二)&#xff1a;启动流程之引导上下文DefaultBootstrapContext 目录 前言一、入口二、DefaultBootstrapContext1、BootstrapRegistry接口2、BootstrapCon…...

配置elk插件安全访问elk前台页面

编辑els配置文件vim elasticsearch.yml,添加以下配置文件 用elk用户&#xff0c;启动els服务 关闭防火墙&#xff0c;查看els启动是否成功&#xff0c;通过是否启动java进程来判断 或者通过查看是否启动9200和9300端口来判断是否启动 交互模式启动密码配置文件interactive表示交…...

[操作系统作业]页面置换算法实现(C++)

&#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;linux &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库&#x1f69a; &#x1f339;&#x1f339;&#x1f339;关注我带你学习编程知识 目录 必做题代码分析&#xff08;重点以时间统计…...

前端技术月刊-2024.11

本月技术月刊聚焦于前端技术的最新发展和业务实践。业界资讯部分&#xff0c;React Native 0.76 版本发布&#xff0c;带来全新架构&#xff1b;Deno 2.0 和 Node.js 23 版本更新&#xff0c;推动 JavaScript 生态进步&#xff1b;Flutter 团队规模缩减&#xff0c;引发社区关注…...

搜索引擎语法大全(Google、bing、baidu)

搜索引擎语法大全 搜索引擎语法通常指的是在搜索引擎中使用特定的运算符和语法来优化搜索结果。 提高搜索精度&#xff1a;使用特定的语法可以帮助用户更精确地找到相关信息&#xff0c;避免无关结果。例如&#xff0c;通过使用引号搜索确切短语&#xff0c;可以确保搜索结果包…...

java设计模式之行为型模式(11种)

行为型模式 行为型模式用于描述程序在运行时复杂的流程控制&#xff0c;即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务&#xff0c;它涉及算法与对象间职责的分配。 行为型模式分为类行为模式和对象型模式&#xff0c;前者采用继承机制来在类间分派…...

微服务系列一:基础拆分实践

目录 前言 一、认识微服务 1.1 单体架构 VS 微服务架构 1.2 微服务的集大成者&#xff1a;SpringCloud 1.3 微服务拆分原则 1.4 微服务拆分方式 二、微服务拆分入门步骤 &#xff1a;以拆分商品模块为例 三、服务注册订阅与远程调用&#xff1a;以拆分购物车为例 3.1 …...

leetcode 1470.重新排列数组

1.题目要求: 2.题目代码: class Solution { public:vector<int> shuffle(vector<int>& nums, int n) {vector<int> x_array(nums.begin(),nums.begin() n);vector<int> y_array(nums.begin() n,nums.end());int x_index 0;int y_index 0;for…...

测试RPA自动化发布-FastAPI实战

# FastAPI 简介这是一篇通过 Playwright 自动发布的测试文章。我们的代码正在测试中......

通过Taotoken用量看板与账单追溯精细化管理团队AI支出

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 通过Taotoken用量看板与账单追溯精细化管理团队AI支出 对于团队管理者而言&#xff0c;将大模型能力集成到业务中后&#xff0c;一…...

为什么92%的AI音频项目在ElevenLabs声音库选型阶段就失败?——资深AI音频架构师12年踩坑复盘

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;为什么92%的AI音频项目在ElevenLabs声音库选型阶段就失败&#xff1f; ElevenLabs 的声音库看似丰富——超 500 个语音模型、多语言支持、情感调节滑块一应俱全&#xff0c;但真实项目落地中&#xff0…...

S19|MCP 与插件:多 Agent 平台 —— 外部能力总线,让外部工具安全接入

在前十八章&#xff0c;我们的 Agent 已经拥有完整的内部能力体系&#xff1a;循环、工具、计划、子代理、技能、压缩、权限、Hook、记忆、提示词流水线、错误恢复、任务系统、后台任务、定时调度、多 Agent 团队、团队协议、自主代理、Worktree 隔离&#xff0c;所有工具都写在…...

MATLAB 2024 升级指南:彻底卸载旧版,高效部署新版

1. 为什么需要彻底卸载旧版MATLAB&#xff1f; 每次MATLAB大版本更新都会带来新功能和性能优化&#xff0c;但很多用户直接覆盖安装后常遇到各种奇怪问题。我去年帮实验室处理过几十台电脑的升级故障&#xff0c;90%的问题都源于旧版残留文件。比如有位同学复现图像处理代码时&…...

为什么顶尖营养实验室都在凌晨2点运行NotebookLM?揭秘膳食-微生物-代谢轴研究中的3大认知跃迁节点

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM营养学研究辅助的范式革命 从文献沼泽到知识图谱驱动 传统营养学研究长期受限于海量异构文献&#xff08;临床试验、膳食调查、代谢组学报告&#xff09;的语义割裂与人工综述瓶颈。Noteboo…...

2026年高口碑GNSS变形监测一体机推荐:提升水库安全解决方案

随着基础设施监测需求的上升&#xff0c;单北斗形变监测一体机逐渐成为各大工程的首选。利用GNSS桥梁形变监测技术、这些设备能够实时监控水库和大坝重要结构的安全情况。单北斗GNSS应用在数据传输和处理上&#xff0c;展现出高效性与可靠性。用户在选择时应关注不同型号的价格…...

Maple Mono 字体配置终极指南:从基础安装到高级定制

Maple Mono 字体配置终极指南&#xff1a;从基础安装到高级定制 【免费下载链接】maple-font Maple Mono: Open source monospace font with round corner, ligatures and Nerd-Font icons for IDE and terminal, fine-grained customization options. 带连字和控制台图标的圆角…...

彩色血流成像(三):滤波

文章目录1回波信号1.1 杂波信号1.2血流信号1.3噪声信号1.4回波信号模拟方法2滤波目的3滤波限制4滤波算法5高通数字滤波器5.1单一回波抵消器5.2FIR滤波器5.3IIR滤波器 无限冲激响应滤波器定义&#xff1a;实现缺点&#xff1a;5.4回归滤波器5.5优化6参数化方法7非参数化方法7.1特…...

Notion 发布开发者平台扩展协作软件,治理与执行决定能否突破试验阶段!

Notion 发布开发者平台扩展协作软件&#xff0c;治理与执行成突破试验阶段关键&#xff01;此次发布让 Notion 在企业软件栈中扮演更重要的角色&#xff0c;但分析师表示&#xff0c;治理和执行情况将决定它能否突破试验阶段。Notion 正在通过一个开发者平台扩展其协作工作空间…...