PageHelper 与 Mybatis Plus 分页插件有什么区别?该如何选择?

2024-02-26 22:44:34 +08:00
 IFallowed
2642 次点击
所在节点    Java
14 条回复
layxy
2024-02-27 08:50:53 +08:00
没啥太大的区别吧, PageHelper 只提供分页功能,Mybatis Plus 不只是提供了分页,还有其他比较方便的功能,如果你用 Mybatis Plus,就没必要使用 PageHelper
jorneyr
2024-02-27 08:57:24 +08:00
这些分页实现的都有严重的性能问题,数据量小没事,数据量大一点的时候查询数量的 SQL 性能很低,甚至比原始 SQL 的效率低几百倍都可能,因为都是最简单的 select count(1) from (original sql) t 这么简单的封装。
cleanery
2024-02-27 09:46:05 +08:00
@jorneyr #2 有更好的替代吗
jorneyr
2024-02-27 12:41:32 +08:00
@cleanery
分析过一些相关的开源项目,目前没有发现好的。
我们公司有专门搞 SQL 分析的部门,我给提要求 count 的改写用完善的方式,MySQL 的他们搞了,其他数据库的偷懒也是直接给 select count(1) from (original) t 了。
Habyss
2024-02-27 16:02:42 +08:00
@jorneyr #2 如果只是这个的话, 是可以分页的时候自定义 count sql 解决的
issakchill
2024-02-27 16:06:30 +08:00
前者以前是写个 threadlocal 的分页标识 不知道改了没有 这种实现太粗糙了
ZeroDu
2024-02-27 18:04:21 +08:00
@jorneyr #2 Mybatis Plus 改了好几个版本了,没有联查的情况下不会走这种的
ZeroDu
2024-02-27 18:08:21 +08:00
jorneyr
2024-02-27 18:25:02 +08:00
@Habyss 自己写 count 了,还用插件的分页干啥呢,自动生成的那些分页语句也是很简单的封装的。
ZGame
2024-02-28 09:37:13 +08:00
@jorneyr 又黑我 count(*) ..... 话说现代数据库引擎 count(*) 应该不会差距太多吧
cppc
2024-02-28 10:05:51 +08:00
@issakchill #6 确实,很早之前用过 PageHelper ,简单用没发现啥大问题,直到有一天为了解决一个问题写了个拦截器,拦截器里面有数据库操作。我才意识到这个设计有大问题。
Rever4433
2024-02-28 11:30:26 +08:00
@jorneyr #2 其实问题不大,我公司用 mybatis-plus 分页,单表数据量 500 万行左右,查起来也能在 1 秒内返回数据。
Aresxue
2024-02-28 14:14:11 +08:00
没啥区别,不想用 Mybatis Plus 想用原生 Mybatis 就可以使用 PageHelper ,不然就直接用 Mybatis Plus 自带的分页好了,不过 Mybatis Plus 确实比较糙,我也贡献过对 limit 的一个优先
jorneyr
2024-02-28 15:22:45 +08:00
@Rever4433 其实问题不大,我公司用 mybatis-plus 分页,单表数据量 500 万行左右,查起来也能在 1 秒内返回数据。

我们就是做数据库客户端工具的,开始的时候我们也是这么认为的,SQL 不就是那么写么,到客户现场后才知道自己有多没见过世面,10M 的 SQL 语句,40 万行的 SQL 语句,Web 端导出几百万行数据,粗暴做法的都死的很难看。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1018649

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX