spring boot 集成pagehelper的使用方法-mile米乐体育
目录
- 前言:
- 一、基本集成
- 引入jar包
- yml配置文件中添加相关配置
- 封装相关分页方法
- 示例代码
- 前段传入参数
- 执行结果
- 二、分页中的排序字段如何防止sql注入问题
- 三、复杂的sql分页语句
- 四、分页失效的常见的场景有哪些?
- 五、大表数据pagehelper分页性能如何
- 总结:
前言:
项目中数据分页是一个很常见的需求,目前大部分项目都会使用pagehelper进行分页,那么在使用的过程中是否考虑如下问题?
一、基本集成
引入jar包
yml配置文件中添加相关配置
pagehelper: helperdialect: mysql reasonable: true supportmethodsarguments: true params: count=countsql
封装相关分页方法
分页参数类 public class pageparam
示例代码
@postmapping("getpagelist") public result getpagelist(@requestbody pageparam
前段传入参数
{ "pagesize":10, "pagenum":"1", //查询条件 "param":{ "name":"张三210001" }, //排序字段 "orderby":"agedesc" }
执行结果
2022-04-15 22:26:39.914 [http-nio-9090-exec-9] debug [613920d89eb54bfd8601c93ec8572dcf] c.s.f.m.usermapper.querypagelist - ==> preparing: select * from t_user u left默认是查询自定义的count语句是否存在,如果存在就用自定义的语句,否则就在外层包装查询的语句,而自定义count语句只需要在在查询语句名称后面添加_count即可。例如
查询集合的语句名称为
querypagelist
,那么查询count的语句为querypagelist_count
,返回long类型即可。
四、分页失效的常见的场景有哪些?
1.pagehelper分页查询有个特殊的要求,查询下sql语句一定要紧跟在分页查询的后面,否则分页查询会失效。之前采用的如下写法容易失效,建议采用java8的写法
pagehelper.startpage(pagedlist.getpagenum(),pagedlist.getpagesize()); //紧跟分页查询后面 list
list = list(user); pageinfo pageinfo =new pageinfo<>(list); return pageutils.topagelist(pageinfo); 2.注意pagehelper的reasonable 默认为false,遇到查询页数大于总页数时,出现分页失败
pagehelper的reasonable 默认为false,遇到查询页数大于总页数时,查询为空;当reasonable设置为true时,遇到查询页数大于总页数时,查询最后一页数据;
3.pagehelper先开启分页,后对list数据操作将会导致分页错误
示例代码:
public pageinfo
getuserpagelist(int pagenum, int pagesize) { pagehelper.startpage(pagenum,pagesize); list tuservosbyview = usermapper.getuserlist(); list tuservos = new arraylist<>(); for (tuservo tuservo : tuservosbyview) { tuservo tuservosingle = new tuservo(); tuservosingle.sethdid(tuservo.gethdid()); tuservos.adhttp://www.cppcns.comd(tuservosingle); } pageinfo pageviewinfo = new pageinfo<>(tuservos); return pageviewinfo; } 4.pagehelper先对list数据操作,后开启分页,将会导致分页失效
示例代码:
public pageinfo
getuserpagelist(int pagenum, int pagesize) { list tuservosbyview = usermapper.getuserlist(); list tuservos = new arraylist<>(); for (tuservo tuservo : tuservosbyview) { tuservo tuservosingle = new tuservo(); tuservosingle.sethdid(tuservo.gethdid()); } pagehelper.startpage(pageno,pagesize); pageinfo pageviewinfo = new pageinfo<>(tuservos); return pageviewinfo; } 大家需要注意下,抽时间可以去验证下结果。
五、大表数据pagehelper分页性能如何
pagehelper 对于大表查询数据量越大,性能越差,这是因为pagehelper分页是自动在sql语句后面拼接limit没有进行相关的优化,一旦数据大,性能就比较慢。
例如:
优化前sql语句:
select d.* from tag_detail d limit 10000000,10
查询的时间大概需要10秒左右,执行速度比较慢。
优化后sql语句:
select d.* from tag_detail d inner join (select oid from tag_detail limit 10000000,10) t on d.oid= t.oid;
子查询先通过分页查询主键字段,然后进行关联查询,经过优化后,查询时间大概为1秒左右。性能大幅度提升。
总结:
本文讲解了pagehelper的基本的使用和相关的问题,这些都是我从实际的项目中总结出来的问题以及相关的mile米乐体育的解决方案,大家在使用的时候要特别注意,不要放同样的错误。
到此这篇关于spring boot 集成pagehelper的使用方法的文章就介绍到这了,更多相关spring boot 集成pagehelper内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
展开全文