Mybatis-plus 分页的三种写法

Mybatis-plus 分页的三种写法

前提:整合mybaitsPlus

 <mybatis-plus-generator.version>3.2.0</mybatis-plus-generator.version>
 <freemarker.version>2.3.28</freemarker.version>
 <fastjson.version>1.2.47</fastjson.version>
 <velocity.version>2.3</velocity.version>
        
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>${mybatis-plus-boot-starter.version}</version>
</dependency>

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-extension</artifactId>
    <version>${mybatis-plus-boot-starter.version}</version>
    <scope>compile</scope>
</dependency>

项目结构

在这里插入图片描述

增加插件

package com.land.cloud.owner.config;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author IT-lc
 * @date 2024/11/29
 * @description 分页插件
 */
@Configuration
@MapperScan("com.land.cloud.owner.mapper")
public class MybatisPlusConfig {
    
    /**
     * 配置mybatis plus 拦截器
     * @return
     */
    @Bean
    public MybatisPlusInterceptor InnerInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        //添加分页插件
        PaginationInnerInterceptor innerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);
        innerInterceptor.setMaxLimit(50L);
        interceptor.addInnerInterceptor(innerInterceptor);
        return interceptor;
    }

}

MybatisPlus 的 baseMapper.selectPage 示例

 public void page1(int currentPage, int pageSize) {
        Page<Fruit> page = new Page<>(currentPage, pageSize);
        page.addOrder(OrderItem.asc("id")); // 排序
        // 优化 COUNT 查询的 SQL 语句,提升性能,默认优化(true) , 当查询包含复杂的 JOIN 或 DISTINCT 时,优化可能不准确,可以设置为 false
        // page.setOptimizeCountSql(false); // 关闭 COUNT SQL 优化:
        // page.setSearchCount(false); // 查询总记录数
        // page.setCountId("customCountId"); // 设置自定义 COUNT 查询
        // page.setMaxLimit(100L); // 设置单页最多查询 100 条记录

        this.fruitMapper.selectPage(page, new LambdaQueryWrapper<Fruit>().like(Fruit::getName, "aa"));
        
        long total = page.getTotal();  // 总记录数
        long pages = page.getPages();  // 总页数
        long rPageSize = page.getSize(); // 获取每页显示的记录数=pageSize
        long current = page.getCurrent(); // 当前页码
        List<OrderItem> orders = page.orders();// 获取排序规则
        List<Fruit> records = page.getRecords();
        boolean hasNext = page.hasNext();        // 是否有下一页
        boolean hasPrevious = page.hasPrevious();// 是否有上一页

        System.out.println("当前页数据:" + records);
        System.out.println("总记录数:" + total);
        System.out.println("是否有下一页:" + hasNext);
    }

基于MyBatisPlus.IService.ServiceImpl 的快捷查询方法分页示例

public void page2(int currentPage, int pageSize) {
        Page<Fruit> page = new Page<>(currentPage, pageSize);
        page.addOrder(OrderItem.asc("id")); // 排序

        this.lambdaQuery()
                .eq(Fruit::getName, "aaaa")
                .orderBy(true, false, Fruit::getId)
                .page(page);

        long total = page.getTotal();  // 总记录数
        long pages = page.getPages();  // 总页数
        long rPageSize = page.getSize(); // 获取每页显示的记录数=pageSize
        long current = page.getCurrent(); // 当前页码
        List<OrderItem> orders = page.orders();// 获取排序规则

        List<Fruit> records = page.getRecords();

        boolean hasNext = page.hasNext();        // 是否有下一页
        boolean hasPrevious = page.hasPrevious();// 是否有上一页

        System.out.println("当前页数据:" + records);
        System.out.println("总记录数:" + total);
        System.out.println("是否有下一页:" + hasNext);
    }

PageHelper 分页插件的使用

更多使用方式参考:官方文档

依赖

<properties>
	<pagehelper.version>1.4.6</pagehelper.version>
</properties>
	
<dependencyManagement>
	<dependency>
		<groupId>com.github.pagehelper</groupId>
		<artifactId>pagehelper-spring-boot-starter</artifactId>
		<version>${pagehelper.version}</version>
	</dependency>
</dependencyManagement>

使用

    public void page3(int currentPage, int pageSize, Fruit fruit) {
        // 设置分页参数,第一页,分页条数为10
        PageHelper.startPage(currentPage, pageSize);
        // 开始查询 List instanceOf Page
        List<Fruit> list = fruitMapper.selectAll(fruit);
        // // 将查询结果包装到PageInfo,PageInfo中包含了页码,查询结果,当前页码等信息
        PageInfo<Fruit> pageInfo = new PageInfo<>(list);

        int pages = pageInfo.getPages();
        long total = pageInfo.getTotal();
        int pageNum = pageInfo.getPageNum();
        List<Fruit> fruits = pageInfo.getList();
    }

问题注意:

  1. 1.2.6 版本的com.github.pagehelper存在依赖循环,升级到最高版本即可解决

  2. PageHelper 插件的方式使用注意要每次都清除一下(参考:https://blog.youkuaiyun.com/qq_31086797/article/details/106628523)

PageHelper的参数清除方法

public abstract class PageMethod {
    protected static final ThreadLocal<Page> LOCAL_PAGE = new ThreadLocal();
    protected static boolean DEFAULT_COUNT = true;

    public PageMethod() {
    }

    public static void clearPage() {
        LOCAL_PAGE.remove();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值