PageHelper在面对复杂service数据处理下的分页问题

27 篇文章 0 订阅
订阅专栏

pagehelper是mybatis配合一个很好用的插件,但是使用有一些局限性

这是使用方式:

会在设置PageHelper.startPage((start / length + 1), length)后的第一个查询自动做分页

这样处理比较简单的数据就比较方便了,但是如果这个service中涉及到了多条mapper查询,并且最后对数据做封装,分页就会出问题了。

理论上pagehelper只会对第一条产生分页作用,可以在service中的第一个查询中得到分页结果,然后再进行遍历查询子集拼装,但是频繁的遍历查询需要不断连接数据库,导致查询效率变慢

解决办法:

     我认为最好的解决办法就是尽量把复杂的业务逻辑用一条mapper查询出来,实在不行再考虑程序拼接

案例:

     我想做一个微信朋友圈接口,分为3个表(这里吐槽一下,因为关系型数据库的严谨性和数据易管理性,有时候一组数据需要多张表联合查询,不够灵活,所以现在资讯类,微博类这种需要大量访问的数据都主张noSql,查询起来会更灵活快捷),朋友圈主题信息表,信息文件表,评论表

 

我需要将朋友圈文件集合和评论集合都嵌套进主体信息表中,来返回这种格式的数据:

 难点就是如果将commentList和fileList塞进去

思路:mybaits中有集合的概念,可以通过在resultMap中设置集合使其自动递归查询需要的集合,最好是配合实体类比较好

具体关于mybatis的collection可以看这个:https://blog.csdn.net/lianzhang861/article/details/86243532

1.新建三个实体类:主体类、文件类、评论类

 

 

 

然后再mapper.xml中的resultMap中设置好collection就行了,具体可以看我上面的链接

<resultMap id="Moment" type="com.bomc.recordLife.entry.Moment" >
        <id column="MOMENT_ID" property="momentId"/>
        <result column="MOMENT_TEXT" property="momentText" jdbcType="VARCHAR" />
        <result column="MOMENT_USER" property="momentUser" jdbcType="VARCHAR" />
        <result column="CREATE_TIME" property="createTime" jdbcType="TIMESTAMP" />
        <result column="MOMENT_STATUS" property="momentStatus" jdbcType="VARCHAR" />
        <result column="MOMENT_TYPE" property="momentType" jdbcType="VARCHAR" />
        <result column="IS_LIKE" property="isLike" jdbcType="VARCHAR" />
        <result column="LONGITUDE" property="longitude" jdbcType="VARCHAR" />
        <result column="LATITUDE" property="latitude" jdbcType="VARCHAR" />
        <result column="USER_NAME" property="userName" jdbcType="VARCHAR" />
        <result column="PORTRAIT_IMG" property="portraitImg" jdbcType="VARCHAR" />

        <collection column="{momentId=MOMENT_ID}" property="fileList"
                    ofType="com.bomc.recordLife.entry.MomentFile"
                    select="selectMomentFiles">
        </collection>

        <collection column="{momentId=MOMENT_ID}" property="commentList"
                    ofType="com.bomc.recordLife.entry.MomentComment"
                    select="selectMomentComments">
        </collection>
    </resultMap>

    <resultMap id="MomentFile" type="com.bomc.recordLife.entry.MomentFile" >
        <id column="FILE_ID" property="fileId"/>
        <result column="MOMENT_ID" property="momentId" jdbcType="VARCHAR" />
        <result column="FILE_TYPE" property="fileType" jdbcType="VARCHAR" />
        <result column="CREATE_TIME" property="createTime" jdbcType="TIMESTAMP" />
        <result column="FILE_NAME" property="fileName" jdbcType="VARCHAR" />
        <result column="FILE_URL" property="fileUrl" jdbcType="VARCHAR" />
        <result column="FILE_SIZE" property="fileSize" jdbcType="VARCHAR" />
    </resultMap>

    <resultMap id="MomentComment" type="com.bomc.recordLife.entry.MomentComment" >
        <id column="COMMENT_ID" property="commentId"/>
        <result column="MOMENT_ID" property="momentId" jdbcType="VARCHAR" />
        <result column="COMMENT_TYPE" property="commmentType" jdbcType="VARCHAR" />
        <result column="CREATE_TIME" property="createTime" jdbcType="TIMESTAMP" />
        <result column="COMMENT_CONTENT" property="commentContent" jdbcType="VARCHAR" />
        <result column="CREATE_USER" property="createUser" jdbcType="VARCHAR" />
    </resultMap>



    <select id="getMoments" resultMap="Moment">
        select
          t.*,t3.USER_NAME,T3.PORTRAIT_IMG,
          (select
                case when count(t2.comment_id)>0 then '1' else '0' end  from moments_comment t2
                where t.moment_id = t2.moment_id
            ) IS_LIKE
        from moments t
        left join SYS_USER t3
        on t.moment_user = t3.user_id
        where
          t.moment_status = '1'
        order by t.create_time desc
    </select>

    <select id="selectMomentFiles" resultMap="MomentFile">
        select t.* from moments_file t
        where t.moment_id = #{momentId,jdbcType=VARCHAR}
    </select>

    <select id="selectMomentComments" resultMap="MomentComment">
        select t.* from moments_comment t
        where t.moment_id = #{momentId,jdbcType=VARCHAR}
    </select>

这样就可以mybatis成功自动递归把文件集合和评论集合自动插入了,这样可以提高查询效率,但是数据库服务器的压力会比较大

 

 

PageHelper插件实现一对多查询时的分页问题
08-26
主要介绍了PageHelper插件实现一对多查询时的分页问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
SpringBoot Mybatis解决使用PageHelper一对多分页问题
qq_34977392的博客
09-27 1411
SpringBoot Mybatis解决使用PageHelper一对多分页问题   一般来说使用PageHelper能解决绝大多数的分页问题,相关使用可在博客园上搜索,能找到很多资料。   之前我在做SpringBoot 项目时遇到这样一个问题,就是当一对多联合查询时需要分页的情况下,使用 PageHelper 做不到对一来进行分页,而是对查询结果做的分页。   后来经过查找相关资料,找...
pagehelper分页插件、& Mybatis plus 分页
weixin_67573348的博客
06-06 4328
在学习项目的过程中遇到了数据分页的功能,单纯的js前端不能处理大的数据量,需要后端整理好数据发送给前端,那么使用分页插件无疑是个好选择.
支持连表等复杂查询的PageHelper修改 —— 支持PageHelper5.1.4 Mybatis3.4.6
Anur IjuoKaruKas的博客
06-11 5744
这是旧版本的做法以及一些当时遇到的问题《支持连表等复杂查询的PageHelper修改》 一、PageHelper分页存在的问题: - 主表结构如下: provider_order表,订单主表。我们这里简化处理,它只有一个字段,即id。 VARCHAR  |  po_id   |    订单表id - 从表结构如下: order_info表,订单从表。它负责记录订单的一些信...
支持连表查询之类的复杂查询的PageHelper修改
weixin_33695082的博客
10-02 684
为什么80%的码农都做不了架构师?>>> ...
使用PageHelper插件实现Service分页
爱吃鸡腿的明仔
04-23 1463
使用场景: 平时分页我们可以直接使用mybatis-plus中内置的IPage进行分页,一般是在mapper中写好接口,在执行sql时就将其进行分页操作,但是有些复杂的查询或者是需要拼接返回格式的数据就难以操作了,所以我们使用PageHelper插件来实现Service分页功能。 1.在pom.xml文件中导入PageHelper插件依赖 <!--pagehelper分页插件--> <dependency> <groupId>com.github.pagehelp
PageHelper使用问题--查询数据出现两遍
Deschampszzzz的博客
02-08 3700
记录使用PageHelper出现数据重复错误
完美解决Pagehelper对有的版本SQL server分页不支持
Java野生程序员的博客
05-04 2092
案例中使用的SQL server版本是SQL server2017 手写count查询 在查询中增加ORDER BY查询 主要事项 在spring boot中的配置 pagehelper.helperDialect=sqlserver2012 pagehelper.reasonable=true pagehelper.supportMethodsArguments=true pagehelper.params=count=countSql ...
使用一次PageHelper导致多条查询分页问题
DCL_CSDN的博客
12-17 1606
使用一次PageHelper导致多条查询分页问题 记一次本人在使用PageHelper分页插件中的问题,本人在一个service方法中有多次查询,先是分页查询,然后将分页查询出的结果再进行二次查询操作,因为数据量比较大,直接多表分页查询比较慢,所以才进行先分页再单条查询,在测试时发现控制台输出sql语句中有多次count查询,为什么会出现多次分页呢,PageHelper官方文档中说明,只需要将PageHelper方法写到需要分页的sql方法上就可以做到该查询的分页,但是怎么会出现所有方法都分页呢?经过查看
Spring Boot+Mybatis+Druid+PageHelper实现多数据源并分页的方法
08-27
PageHelper会自动处理分页逻辑,返回分页结果。 ```java @GetMapping("/list") public PageInfo<User> userList(Page page) { List<User> users = userService.getUserList(page); return page; } ``` 以上...
SpringBoot+Mybatis+Druid+PageHelper实现多数据源并分页方法
08-26
在本文中,我们将深入探讨如何使用SpringBoot、Mybatis、Druid和PageHelper来实现多数据源和分页功能。首先,SpringBoot是基于Spring框架的简化版本,它旨在简化微服务开发,提供了自动配置、内嵌式Web服务器以及...
分页插件jar包pagehelper
09-29
接着,只需在Mapper接口的方法上使用`@Select`或`@Update`注解,并在对应的XML文件中编写SQL语句,PageHelper会自动处理分页逻辑。在Service层,可以通过PageHelper的startPage()方法设定当前页码和每页显示的数量,...
Bootstrap Paginator+PageHelper实现分页效果
10-17
- 在Service接口和实现中,将查询到的数据封装到PageBean对象中,以实现分页数据的传递和处理。 3. SpringBoot与Mybatis的整合: - SpringBoot框架可以极大地简化企业级Java应用的搭建和开发过程,而Mybatis则是...
Spring Data JPA 分页接口的使用方法——PageHelper分页查询方法
AI天才研究院
07-28 2334
2017年,全国IT企业纷纷转向云计算、容器技术,并掀起了一股“容器潮流”。容器化、微服务架构以及分布式系统架构模式越来越流行,对于大型复杂系统而言,数据库分页查询在性能上就成为一个重要的优化点。基于此,当下互联网中最流行的开源框架之一, MyBatis 和 SpringData JPA 等都提供了分页查询功能。PageHelperMyBatis 中的一个分页插件,作用是在不用改变 SQL 查询的前提下,实现自定义物理分页,非常方便开发者使用。
SpringBoot使用pagehelper插件实现分页
CoderS的博客
01-26 392
文章目录1、导包2、分页请求类3、例子4、接口测试 之前写项目时都是自己去写分页,头大!自己写的分页很可能要写两次查询,一次查内容,二次查条数。这种就是费力不讨好的事,所以去看了一下pagehelper分页插件(都说是最方便使用的分页插件),学完随便做个笔记。 ​ pagehelper插件主要是把PageHelper.startPage(pageNum, pageSize)放在sql查询之前。他会去处理查询内容,进行分页处理。 1、导包 <!-- pagehelper -->
数据库中表的复杂查询&分页
java小兵
07-01 2476
一、数据库中表的复杂查询 1)连接查询 1.0连接的基本语法格式: from TABLE1 join_type TABLE2 [on (join_condition)][where (query_condition)] TABLE1:左表 TABLE2:右表 join_type:连接的类型。交叉、内连接、左外连接、右外连接 on:设置连接条件 where...
分页PageHelper与通用Mapper
huangyh技术栈
11-18 973
 1.分页PageHelper与通用Mapper  1.1 集成分页助手PageHelper 使用分页助手PageHelper的好处? A,简化分页查询。select * from  tb_user limit ?,? B,简化统计查询。Select count(1) from tb_user C,不用关心底层数据库MySQL、Oracle),因为分页助手会根据方言自动生成数据库相关...
关于mybatis分页PageHelper中mapper查出跟service层不一样的类型的问题
w8y56f的专栏
09-27 1194
问题痛点 在查询分页的时候,我们一般用PageHelper(com.github.pagehelper)。 在service层,我们使用mapper查询数据。service的返参一般是dto,但是mapper一般不返回dto(返回跟表一一对应的实体类,如eo,但service层返回如PageInfo) 这就需要将eo转成dto,问题点就在于,在PageHelper那行代码之后的查询结果并不是List,而是PagePage是ArrayList的子类,查询的Page结果是带有许多跟分页有段的额外结果的,如果只
Oracle给结果排序后添加序号和返回某条记录的序号
热门推荐
lianzhang861的博客
04-24 3万+
首先在oracle里面的序号一般使用rownumselect rownum,t.* from T_USER_BASICINFO t 但需要用其中某个字段排序的情况,rownum就不能按顺序排序了。这里用u_level字段排序select rownum,t.* from T_USER_BASICINFO t order by t.u_level 解决办法:第一种:select ...
pagehelper分页
最新发布
09-19
通过使用PageHelper的物理分页功能,我们可以在处理大量数据的情况下保持较高的查询性能。 总的来说,PageHelper是一个功能强大、易于使用的分页插件,它在实际的开发中能够提高我们的开发效率,减少重复的编码工作...
154
原创
646
点赞
2609
收藏
2万+
粉丝
关注
私信
写文章

热门文章

  • js如何识别出字符串中的回车 \n并输出换行 187637
  • 几款实用的前端日历时间日期选择控件 159420
  • MySQL安装问题--Can‘t connect to MySQL server on localhost (10061)解决方法 139405
  • 关于input type=“file”的及其files对象的深层探究 118194
  • layui-laydate时间日历控件详细示例 104055

分类专栏

  • springboot 10篇
  • uniapp 9篇
  • 微信公众号 1篇
  • vmware 1篇
  • 常用软件问题 1篇
  • 前端 61篇
  • 服务器 14篇
  • js 5篇
  • SpringMVC 4篇
  • java 4篇
  • 系统 5篇
  • 后端问题 14篇
  • 数据库 27篇
  • mui 6篇
  • 小程序 2篇

最新评论

  • uniapp 地图map画出地市轮廓

    CSC_TA: 画出的轮廓有点击事件嘛?

  • js iframe获取documen中的对象为空问题

    番茄不怯: 为什么我没有onload方法

  • uniapp 地图map画出地市轮廓

    CSDN-Ada助手: 小程序 技能树或许可以帮到你:https://edu.csdn.net/skill/mini_programs?utm_source=AI_act_mini_programs

  • window远程桌面连接互传文件加速小技巧

    BeichuanNice: 听了你的,更慢了

  • vue-org-tree 组织结构图组件应用及源码分析

    deathknight10: 有开源的吗

最新文章

  • uniapp 地图map画出地市轮廓
  • Mysql 本地计算机无法启动 mysql 服务 错误 1067:进程意外终止
  • uniapp+java/springboot实现微信小程序APIV3支付功能
2024年1篇
2023年3篇
2022年3篇
2021年15篇
2020年14篇
2019年31篇
2018年95篇
2017年1篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豆趣编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳坪山网站建设公司优化型网站杭州优化网站代理成都网站网络推广优化黄石本地网站优化要多少钱兴平网站关键词排名优化闵行区项目网站优化价格新郑网站关键词优化公司费用天水网站关键词优化武汉网站关键词优化优化网站关键词排名肇庆网站优化软件网站优化四大重点西安网站优化公司哪家好口碑好的企业网站优化哪家服务好网站搜索引擎优化方案承德网站优化怎么做从化seo网站优化快速网站优化方法丹东专业网站优化壹起航网站优化的缺点合川网站内页优化松岗免费的网站优化网站优化围绕标题晋城网站优化贵吗伊春网站网址优化牡丹江网站优化电话网站优化的六大要素上海信息化网站优化质量保障正规网站推广优化软件什么属于网站建设优化香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

深圳坪山网站建设公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化