Mybatis-Plus 使用逻辑分页处理

本文介绍了在无法使用物理分页的情况下,如何利用Mybatis-Plus进行逻辑分页处理。逻辑分页是先查询全部数据,然后对数据进行处理后再分页展示。文章提到了Mybatis-Plus自带的分页工具,并展示了具体的方法调用示例。

因为大部分的数据都是可以通过自带的分页查询

但还是有部分数据是查询出来后再做处理的,所以使用不了物理分页,故需要使用逻辑分页

逻辑分页:就是把数据查询出来,再通过处理的出来的新的list再对该数据进行分页显示

1.下面是采用mybatis-plus的分页自带的分页工具

@Override
	public PageUtils queryCustomerPage(TbUserQuery query) {
		//用户分页显示 下面的list查询出来后再进行处理
		List<AllUserListVo> queryAllUserPageListCount = new ArrayList<>();
		
		//分页
    	List pageList = ListFormUtils.getPageList(queryAllUserPageListCount, query.getPage(), query.getLimit(), 
    			queryAllUserPageListCount.size());
		
		return new PageUtils(pageList, queryAllUserPageListCount.size(), query.getLimit(), query.getPage());
	}

2.上面的逻辑分页方法getPageList 如下

/**
	 * 分页方法
	 * 
	 * @param list
	 *            源数据
	 * @param currentPage
	 *            当前页
	 * @param maxNum
	 *            每页显示几条
	 * @param pageNum
	 *            总条数
	 * @return
	 */
	public static List getPageList(List list,int currentPage,int maxNum,int pageNum) {
		int totalCount = list.size();
        int pageCount;
        int m = totalCount % maxNum;

        if (m > 0) {
            pageCount = totalCount / maxNum + 1;
        } else {
            pageCount = totalCount / maxNum;
        }

        
		int fromIndex = 0; // 从哪里开始截取
		int toIndex = 0; // 截取几个
		if (list == null || list.size() == 0)
			return null;
		// 当前页小于或等于总页数时执行
		if (currentPage <= pageCount && currentPage != 0) {
			fromIndex = (currentPage - 1) * maxNum;

			if (currentPage == pageCount) {
				toIndex = list.size();
				
			} else {
				toIndex = currentPage * maxNum;
			}

		}
		return list.subList(fromIndex, toIndex);
	}

再通过分页使用

得出来的就是正常的处理过后的分页

MyBatis-Plus分页功能默认情况下是通过物理分页实现的。其核心机制依赖于分页插件(如 `PaginationInterceptor` 或新版本中的 `PaginationInnerInterceptor`)在 SQL 执行时动态地添加分页相关的语句,从而实现数据库层面的数据限制[^1]。 具体来说,当使用 `Page` 对象进行分页查询时,MyBatis-Plus 会将 SQL 语句改写为带有 `LIMIT` 和 `OFFSET` 子句的形式(以 MySQL 为例),这样可以有效地减少从数据库中检索的数据量,提高查询效率。例如,在 MySQL 中生成的 SQL 可能如下所示: ```sql SELECT * FROM table_name LIMIT 0, 10; ``` 其中,`LIMIT 0, 10` 表示从第 0 条记录开始,获取 10 条记录,这正是物理分页的核心特征。 此外,需要注意的是,`PaginationInterceptor` 是旧版本 MyBatis-Plus 提供的分页插件,而在较新版本中推荐使用 `PaginationInnerInterceptor`,因为后者提供了更好的性能和兼容性。 如果开发者没有正确配置分页插件或者存在与其他分页组件(如 PageHelper)冲突的情况,则可能导致分页结果不准确,比如返回的 `total` 总为 0 等问题。因此,确保仅使用一个分页解决方案,并按照官方文档正确配置插件是非常重要的[^2]。 ### 分页插件配置示例 以下是一个基于 `PaginationInnerInterceptor` 的典型配置示例,适用于 MyBatis-Plus 3.4.x 及以上版本: ```java import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MyBatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); // 添加分页插件 interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); return interceptor; } } ``` 通过上述配置,MyBatis-Plus 将能够正确地在数据库层面对查询进行分页处理,而不是在应用层进行逻辑分页
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值