我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Mybatis使用collection分页问题举例分析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Mybatis使用collection分页问题举例分析

本篇内容介绍了“Mybatis使用collection分页问题举例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

原因

引起该问题的原因是当我们使用的是ResultMap集合的嵌套结果映射来处理通过join查询的结果集,映射成Java实体类型的时候,会导致主数据被映射折叠后少于从数据库获取的数据,从而导致获取的映射数据少于每页大小的数据。

方案

方案一

不使用集合的嵌套结果映射,使用集合的嵌套select查询解决。使用该方案需要注意性能问题,会导致“N+1查询问题”。

这种方式虽然很简单,但在大型数据集或大型数据表上表现不佳。这个问题被称为“N+1 查询问题”。 概括地讲,N+1 查询问题是这样子的:

你执行了一个单独的 SQL 语句来获取结果的一个列表(就是“+1”)。对列表返回的每条记录,你执行一个 select 查询语句来为每条记录加载详细信息(就是“N”)。

这个问题会导致成百上千的 SQL 语句被执行。有时候,我们不希望产生这样的后果。

好消息是,MyBatis 能够对这样的查询进行延迟加载,因此可以将大量语句同时运行的开销分散开来。 然而,如果你加载记录列表之后立刻就遍历列表以获取嵌套的数据,就会触发所有的延迟加载查询,性能可能会变得很糟糕。

方案二

移除collection配置,在业务逻辑中进行处理。先将参与分页的数据获取出来,再根据需要在业务代码中获取分页数据关联的数据。博主更倾向于这种方案解决mybatis中collection分页问题。

扩展

Mybatis中配置加载一对多关系的两种方式:

1.集合的嵌套 Select 查询

一共会产生两个SQL语句,一个查询主的数据,另一个查询关联的数据。如下所示:

<resultMap id="blogResult" type="Blog">  <collection property="posts" javaType="ArrayList" column="id" ofType="Post" select="selectPostsForBlog"/></resultMap> <select id="selectBlog" resultMap="blogResult">  SELECT * FROM BLOG WHERE ID = #{id}</select> <select id="selectPostsForBlog" resultType="Post">  SELECT * FROM POST WHERE BLOG_ID = #{id}</select>

2.集合的嵌套结果映射

只会产品一个SQL语句,主数据以及关联数据通过别名的形式进行配置映射到各自的对象的属性上。入戏所示:

<resultMap id="blogResult" type="Blog">  <id property="id" column="blog_id" />  <result property="title" column="blog_title"/>  <collection property="posts" ofType="Post" resultMap="blogPostResult" columnPrefix="post_"/></resultMap> <resultMap id="blogPostResult" type="Post">  <id property="id" column="id"/>  <result property="subject" column="subject"/>  <result property="body" column="body"/></resultMap>

“Mybatis使用collection分页问题举例分析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Mybatis使用collection分页问题举例分析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Mybatis使用collection分页问题举例分析

本篇内容介绍了“Mybatis使用collection分页问题举例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!原因引起该问题的原因是当
2023-06-21

Hibernate3.1问题举例分析

本篇内容主要讲解“Hibernate3.1问题举例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Hibernate3.1问题举例分析”吧!今天在运行一个很简单的save()方法报:Excep
2023-06-17

mybatis-plus使用问题的示例分析

这篇文章主要为大家展示了“mybatis-plus使用问题的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mybatis-plus使用问题的示例分析”这篇文章吧。一、多表联合分页查询1.
2023-06-29

Python特性问题举例分析

本篇内容主要讲解“Python特性问题举例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python特性问题举例分析”吧!仔细分析一下,这2个参数中,有1个Python 特性是在reques
2023-06-17

Python中文问题举例分析

本篇内容介绍了“Python中文问题举例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在这之前,我们先要了解Python中有两种字符串,
2023-06-17

Python线程操作问题举例分析

这篇文章主要介绍“Python线程操作问题举例分析”,在日常操作中,相信很多人在Python线程操作问题举例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python线程操作问题举例分析”的疑惑有所帮助!
2023-06-17

MyBatis Mapper中的通用example举例分析

本篇内容介绍了“MyBatis Mapper中的通用example举例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!MyBatis通用M
2023-06-22

Python程序开发问题举例分析

这篇文章主要介绍“Python程序开发问题举例分析”,在日常操作中,相信很多人在Python程序开发问题举例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python程序开发问题举例分析”的疑惑有所帮助!
2023-06-17

BufferedReader的读取效率问题举例分析

这篇文章主要讲解了“BufferedReader的读取效率问题举例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“BufferedReader的读取效率问题举例分析”吧!BufferedR
2023-06-22

Java double类型相加问题举例分析

本篇内容介绍了“Java double类型相加问题举例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Java double类型相加问题多
2023-06-22

java中线程安全问题举例分析

这篇文章主要讲解了“java中线程安全问题举例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java中线程安全问题举例分析”吧!一、什么时候数据在多线程并发的环境下会存在安全问题?三个条
2023-06-21

C++模板>>编译问题举例分析

本篇内容主要讲解“C++模板>>编译问题举例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++模板>>编译问题举例分析”吧!在编译理论中,通常将编译过程抽象为5个主要阶段:词法分析(Lex
2023-06-17

ASP.NET Core中使用滑动窗口限流的问题举例分析

本篇内容主要讲解“ASP.NET Core中使用滑动窗口限流的问题举例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“ASP.NET Core中使用滑动窗口限流的问题举例分析”吧!滑动窗口算法
2023-06-22

Mybatis延迟加载问题的示例分析

这篇文章主要介绍Mybatis延迟加载问题的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!延迟加载问题MyBatis针对关联表中的数据支持延迟加载。延迟加载其实就是将数据加载时机推迟,比如推迟嵌套查询的执行时
2023-06-15

scala隐式转换优先级问题举例分析

本篇内容介绍了“scala隐式转换优先级问题举例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!隐式转换编译器会优先选择方法的参数作为转换
2023-06-03

Mybatis-Plus进阶分页,乐观锁插件,通用枚举和多数据源实例分析

这篇文章主要介绍了Mybatis-Plus进阶分页,乐观锁插件,通用枚举和多数据源实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Mybatis-Plus进阶分页,乐观锁插件,通用枚举和多数据源实例分析文
2023-06-29

C#网络编程消息发送问题举例分析

本篇内容介绍了“C#网络编程消息发送问题举例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!C#网络编程消息发送问题:客户端分两次向流中写
2023-06-17

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录