首页 > 作文

关于Mybatis使用collection分页问题

更新时间:2023-04-03 22:26:26 阅读: 评论:0

目录
原因方案方案一方案二扩展1.集合的嵌套 lect 查询2.集合的嵌套结果映射参考:

项目中mybatis分页的场景是非常高频的,当使用resultmap并配置collection做分页的时候,我们可能会遇到获取当前页的数据少于每页大小的数据问题。使用pagerhelper插件同样会遇到该问题。

原因

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

方案

方案一

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

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

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

这个问题会导杭州当贝网络科技有限公司致成百上千的 sql 语句被执行。有时候,我们不希望产生这样的后果。

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

方案二

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

扩展

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

1.集合的嵌套 lect 查询

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

<resultmap id="blogresult" type="blog">  <collection property="posts" javatype="arraylist" column="id"生死场 oftype="post" lect="l社区入党ectpostsforblog"/></resultmap> <lect id="lectblog" resultmap="blogresult">  lect * from blog where id = #{id}</lect> <lect id="lectpostsforblog" resulttype="post">  lect * from post where blog_id = #{id}</lect>

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高级结果映射resultmap介绍与使用(包含collection使用)

pagehelper插件重要提示(分页插件不支持嵌套结果映射)

mybatis resultmap之collection聚集两种实现方式

到此这篇关于mybatis使用collection分页问题的文章就介绍到这了,更多相关mybatis collection分页内走在回家的路上容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

本文发布于:2023-04-03 22:26:25,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/d369031edce554e633d7d0b17269bb51.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:关于Mybatis使用collection分页问题.doc

本文 PDF 下载地址:关于Mybatis使用collection分页问题.pdf

下一篇:返回列表
标签:嵌套   数据   分页   方案
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图