select 分页查询

注意:本教程使用的数据库脚本、数据模型和环境信息请参考 “MyBatis Plus环境准备” 章节,点击下载示例源码

本章节将介绍 BaseMapper 中的分页查询,BaseMapper 接口提供了如下几个分页查询接口:

  • selectPage:根据 entity 条件,查询全部记录

  • selectMapsPage:根据 Wrapper 条件,查询全部记录

在使用上面两个方法进行分页查询时,我们需要配置分页插件。由于我们使用的 Spring Boot 项目,因此需要通过 @Configuration 和 @Bean 注解来添加配置。完整配置类如下:

package com.hxstrive.mybatis_plus;

import com.baomidou.mybatisplus.annotation.DbType;
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 paginationInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 指定数据库方言为 MYSQL
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }

}

注意:如果你没有配置分页插件,则不会进行分页。

示例代码

使用 QueryWrapper 和 Page 作为参数进行分页,例如:

package com.hxstrive.mybatis_plus.select;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hxstrive.mybatis_plus.mapper.SimpleMapper;
import com.hxstrive.mybatis_plus.model.UserBean;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
class Select6Test {

    @Autowired
    private SimpleMapper simpleMapper;

    @Test
    void contextLoads() {
        QueryWrapper<UserBean> wrapper = new QueryWrapper<>();
        wrapper.isNotNull("user_id");

        // 创建分页对象(1表示第一页;4表示每页大小为4)
        Page<UserBean> page = new Page<>(1, 4);
        Page<UserBean> result = simpleMapper.selectPage(page, wrapper);
        System.out.println("page == result: " + (page == result));
        System.out.println("size: " + result.getSize());
        System.out.println("total: " + result.getTotal());
        for(UserBean userBean : result.getRecords()) {
            System.out.println(userBean);
        }
    }

}

运行上面代码,你会发现 page 和 selectPage 返回的 result 相等,说明两者是同一个对象。因此,可以忽略掉 selectPage 方法的返回结果,如下:

Page<UserBean> page = new Page<>(1, 4);
simpleMapper.selectPage(page, wrapper);

另外一个分页方法,selectMapsPage 和上面的使用方法一样,仅仅是返回类型不一样。代码如下:

package com.hxstrive.mybatis_plus.select;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hxstrive.mybatis_plus.mapper.SimpleMapper;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.Map;

@RunWith(SpringRunner.class)
@SpringBootTest
class Select7Test {

    @Autowired
    private SimpleMapper simpleMapper;

    @Test
    void contextLoads() {
        // 返回的结果类型为 Map<String,Object>
        Page<Map<String,Object>> page = new Page<>(1, 4);
        simpleMapper.selectMapsPage(page, null);
        System.out.println("size: " + page.getSize());
        System.out.println("total: " + page.getTotal());
        System.out.println("pages: " + page.getPages());
        for(Map<String,Object> map : page.getRecords()) {
            System.out.println(map);
        }
    }

}

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号