赞
踩
业务中查询数据库,对数据分页是必不可少的,但是传统的分页功能必须自己手动实现,还得多写一条sql才能获取数据的总数,这让使用分页功能较为繁琐。
github提供的pageHelper分页插件可以让我们仅仅设置起始页码和分页大小就可以轻松的完成分页功能。
导入pagehelper 的springboot启动器。
注意版本号。
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.13</version>
</dependency>
# page helper 配置
pagehelper:
helper-dialect: mysql
reasonable: false
support-methods-arguments: true
sql语言辅助器。
配置使用哪种数据库语言,如果不配置,pageHelper也会自动检测。
配置分页参数合理化功能,默认是false。
启用合理化配置后,如果pageNum < 1会查询第一页,如果pageNum>总页数会查询最后一页。
禁用合理化配置后,如果pageNum < 1或者pageNum > 总页数会返回空数据。
为了支持startPage(Object params)方法,增加了该参数来配置参数映射,用于从对象中根据姓名取值;
可以配置pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值,默认值为:
pageNum=pageNum,pageSize=pageSize,count=countSql,reasonable=reasonable,pageSizeZero=pageSizeZero。
支持通过Mapper接口参数来传递分页参数,默认值false,分页插件会从查询方法的参数值中,自动根据上面的params配置的字段来取值,查找到合适的值就会自动分页。
非常简单,只需要在你查询数据的那一句代码前面,写上PageHelper.startPage()方法,传入pageNum(页数)和pageSize(行数)就可以了(写了这个方法,在执行查询语句时,pageHelper会自动拦截查询语句并拼接相关的分页sql);过程如下:
public List<PersonOrgRelEntity> queryPagePerson(BasePageReqDto reqDto) {
Page<PersonOrgRelEntity> page = PageHelper.startPage(1, 10);
// 使用tkmybatis查询数据
Example queryCondition = new Example(PersonOrgRelEntity.class);
queryCondition.orderBy("createTime");
List<PersonOrgRelEntity> relEntityList = personOrgRelMapper.selectByExample(queryCondition);
log.info("rel total count:{}", page.getTotal());
return relEntityList;
}
//第一种,RowBounds方式的调用 List<User> list = sqlSession.selectList("x.y.selectIf", null, new RowBounds(0, 10)); //第二种,Mapper接口方式的调用,推荐这种使用方式。 PageHelper.startPage(1, 10); List<User> list = userMapper.selectIf(1); //第三种,Mapper接口方式的调用,推荐这种使用方式。 PageHelper.offsetPage(1, 10); List<User> list = userMapper.selectIf(1); //第四种,参数方法调用 //存在以下 Mapper 接口方法,你不需要在 xml 处理后两个参数 public interface CountryMapper { List<User> selectByPageNumSize( @Param("user") User user, @Param("pageNum") int pageNum, @Param("pageSize") int pageSize); } //配置supportMethodsArguments=true //在代码中直接调用: List<User> list = userMapper.selectByPageNumSize(user, 1, 10); //第五种,参数对象 //如果 pageNum 和 pageSize 存在于 User 对象中,只要参数有值,也会被分页 //有如下 User 对象 public class User { //其他fields //下面两个参数名和 params 配置的名字一致 private Integer pageNum; private Integer pageSize; } //存在以下 Mapper 接口方法,你不需要在 xml 处理后两个参数 public interface CountryMapper { List<User> selectByPageNumSize(User user); } //当 user 中的 pageNum!= null && pageSize!= null 时,会自动分页 List<User> list = userMapper.selectByPageNumSize(user); //第六种,ISelect 接口方式 //jdk6,7用法,创建接口 Page<User> page = PageHelper.startPage(1, 10).doSelectPage(new ISelect() { @Override public void doSelect() { userMapper.selectGroupBy(); } }); //jdk8 lambda用法 Page<User> page = PageHelper.startPage(1, 10).doSelectPage(()-> userMapper.selectGroupBy()); //也可以直接返回PageInfo,注意doSelectPageInfo方法和doSelectPage pageInfo = PageHelper.startPage(1, 10).doSelectPageInfo(new ISelect() { @Override public void doSelect() { userMapper.selectGroupBy(); } }); //对应的lambda用法 pageInfo = PageHelper.startPage(1, 10).doSelectPageInfo(() -> userMapper.selectGroupBy()); //count查询,返回一个查询语句的count数 long total = PageHelper.count(new ISelect() { @Override public void doSelect() { userMapper.selectLike(user); } }); //lambda total = PageHelper.count(()->userMapper.selectLike(user));
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。