欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SpringBoot整合Mybatis分页插件PageHelper

程序员文章站 2022-07-15 10:26:51
...

当对后台查询的数据需要进行分页时,在数据库层面可以使用Mybatis的分页插件,使用非常方便。
PageHelper.startPage(pageNum, pageSize);
对,就这么一行简单的代码就可以实现了,但是也是要注意几个问题:
添加依赖:

    <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.5</version>
     </dependency>

调用方式:
(1)Mapper接口方式的调用(推荐使用)

	PageHelper,startPage(1,20);
	List<User> list = userMapper.selectUser();

(2)参数方法使用
存在以下Mapper接口方法,不需要在xml处理后两个参数

public interface CountryMapper{
	List<User> selectByPageNum(@Param("user") User user,@Param("pageNum") int pageNum,@Param("pageSize") int pageSize);
}

配置supportMethodArguments = true
在代码中直接调用:

List<User> list = userMapper.selectByPageNum(user,1,20);

(3)参数对象
如果pageNum和pageSize存在于User对象中,只要参数有值,也会被分页

public class User {
	private Integer pageNum;
	private Integer pageSize;
}

存在以下mapper接口方法,你不需要在xml处理后两个参数

public interface CountryMapper {
	List<User> selectByPageNum(User user);
}

当pageNum != null && pageSize != null时,会自动分页

List<User> list = userMapper.selectByPageNum(user);

(4)ISelect接口方式,jdk6、7用法

Page<User> page = PageHelper.startPage(1,20).doSelectPage(new ISelect() {
	@Override
	public void doSelect(){
		userMapper.selectList();
	}
})

(5)jdk8 lambda用法

Page<User> page = PageHelper.startPage(1,20).doSelectPage(() -> userMapper.selectList());

也可以直接返回pageInfo

pageInfo = PageHelper.startPage.startPage(1,20).doSelectPageInfo(new ISelect() {
	@Override
	public void doSelect() {
		userMapper.selectList();
	}
})

对应的lambda用法

pageInfo = PageHelper.startPage(1,20).doSelectPageInfo(() -> userMapper.selectList());

count查询,返回一个查询语句的count数

long total = PageHelper.count(new ISelect() {
	@Override
	public void doSelect() {
		userMapper.selectLike(user);
	}
})

lambda用法

total = PageHelper.count(() -> userMapper.selectLike(user));

List手动分页

/**
 * 开始分页
 *
 * @param list
 * @param pageNum  页码
 * @param pageSize 每页多少条数据
 * @return
 */
public static List startPage(List list, Integer pageNum, Integer pageSize) {
    if(list == null){
        return null;
    }
    if(list.size() == 0){
        return null;
    } 
    Integer count = list.size(); //记录总数
    Integer pageCount = 0; //页数
    if (count % pageSize == 0) {
        pageCount = count / pageSize;
    } else {
        pageCount = count / pageSize + 1;
    }
    int fromIndex = 0; //开始索引
    int toIndex = 0; //结束索引
    if(pageNum > pageCount){
        pageNum = pageCount;
    }
    if (!pageNum.equals(pageCount)) {
        fromIndex = (pageNum - 1) * pageSize;
        toIndex = fromIndex + pageSize;
    } else {
        fromIndex = (pageNum - 1) * pageSize;
        toIndex = count;
    }
    List pageList = list.subList(fromIndex, toIndex);
    return pageList;
}
相关标签: SpringBoot mysql