首页 > 其他分享 >MyBatis-Plus分页查询

MyBatis-Plus分页查询

时间:2024-09-28 17:19:41浏览次数:12  
标签:分页 博客 junbiao Plus MyBatis import pjb com pan

在实际开发中,对于大量数据的查询,可以通过分页查询的方式来减少查询量和提高查询效率。在 MyBatis-Plus 中,分页查询可以通过使用 Page 对象和 IService 接口提供的分页方法来实现。MyBatis-Plus 的分页插件 PaginationInnerInterceptor 提供了强大的分页功能,支持多种数据库,使得分页查询变得简单高效。

官方文档:《MyBatis-Plus 分页插件》

Page 类的说明:

Page 类继承了 IPage 类,实现了简单分页模型。如果你需要实现自己的分页模型,可以继承 Page 类或实现 IPage 类。 

属性名类型默认值描述
recordsList<T>emptyList查询数据列表
totalLong0查询列表总记录数
sizeLong10每页显示条数,默认 10
currentLong1当前页
ordersList<OrderItem>emptyList排序字段信息
optimizeCountSqlbooleantrue自动优化 COUNT SQL
optimizeJoinOfCountSqlbooleantrue自动优化 COUNT SQL 是否把 join 查询部分移除
searchCountbooleantrue是否进行 count 查询
maxLimitLong单页分页条数限制
countIdStringXML 自定义 count 查询的 statementId

通过这些配置和使用方法,你可以轻松地在 MyBatis-Plus 中实现分页查询,提高应用的性能和用户体验。

【实例】SpringBoot 整合 MyBatis-Plus 实现分页查询,并显示分页信息。执行效果如下图:

1、创建数据表

在MySQL数据库中创建用户信息表(tb_user),并添加数据。

-- 创建数据库
CREATE DATABASE IF NOT EXISTS db_admin;

-- 使用数据库
USE db_admin;

-- 判断数据表是否存在,存在则删除
DROP TABLE IF EXISTS tb_user;
 
-- 创建“用户信息”数据表
CREATE TABLE IF NOT EXISTS tb_user
( 
	user_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '用户编号',
	user_name VARCHAR(50) NOT NULL COMMENT '用户姓名',
	province VARCHAR(50) NOT NULL COMMENT '省份',
	create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间'
) COMMENT = '用户信息表';

-- 添加数据
INSERT INTO tb_user(user_name,province) VALUES
('pan_junbiao的博客_01','广东省'),('pan_junbiao的博客_02','黑龙江省'),('pan_junbiao的博客_03','山东省'),('pan_junbiao的博客_04','安徽省'),('pan_junbiao的博客_05','黑龙江省'),
('pan_junbiao的博客_06','江苏省'),('pan_junbiao的博客_07','黑龙江省'),('pan_junbiao的博客_08','广东省'),('pan_junbiao的博客_09','陕西省'),('pan_junbiao的博客_10','广东省'),
('pan_junbiao的博客_11','广东省'),('pan_junbiao的博客_12','江苏省'),('pan_junbiao的博客_13','陕西省'),('pan_junbiao的博客_14','安徽省'),('pan_junbiao的博客_15','山东省'),
('pan_junbiao的博客_16','陕西省'),('pan_junbiao的博客_17','安徽省'),('pan_junbiao的博客_18','江苏省'),('pan_junbiao的博客_19','黑龙江省'),('pan_junbiao的博客_20','安徽省'),
('pan_junbiao的博客_21','江苏省'),('pan_junbiao的博客_22','广东省'),('pan_junbiao的博客_23','安徽省'),('pan_junbiao的博客_24','陕西省'),('pan_junbiao的博客_25','广东省'),
('pan_junbiao的博客_26','广东省'),('pan_junbiao的博客_27','安徽省'),('pan_junbiao的博客_28','山东省'),('pan_junbiao的博客_29','山东省'),('pan_junbiao的博客_30','黑龙江省'),
('pan_junbiao的博客_31','广东省'),('pan_junbiao的博客_32','江苏省'),('pan_junbiao的博客_33','陕西省'),('pan_junbiao的博客_34','安徽省'),('pan_junbiao的博客_35','山东省');

-- 查询数据
SELECT * FROM tb_user;

2、创建项目

(1)创建 SpringBoot 项目,项目结构如下图:

(2)添加 Maven 依赖

在 pom.xml 配置文件中添加 MyBatis-Plus、 MySQL 的 JDBC 数据库驱动、Lombok 插件等依赖。

<!-- MyBatis-Plus 依赖 -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.7</version>
</dependency>
 
<!-- MySQL的JDBC数据库驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.33</version>
</dependency>
 
<!-- Lombok 依赖 -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.34</version>
    <scope>provided</scope>
</dependency>

(3)配置相关信息

将默认的 application.properties 文件的后缀修改为“.yml”,即配置文件名称为:application.yml,并配置以下信息:

#Spring配置
spring:
  application:
    #项目名称
    name: ProjectManagement
  #DataSource数据源
  datasource:
    url: jdbc:mysql://localhost:3306/db_admin?useSSL=false&amp&serverTimezone=UTC
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver
 
#MybatisPlus配置
mybatis-plus:
  configuration:
    #配置日志
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

2.1 创建配置类(Config层)

在 com.pjb.pm.config 包中,创建 MybatisPlusConfig 类(MybatisPlus配置类)。

package com.pjb.pm.config;

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;

/**
 * MybatisPlus配置类
 * @author pan_junbiao
 **/
@Configuration
public class MybatisPlusConfig
{
    /**
     * 新增分页拦截器,并设置数据库类型为 mysql
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}

2.2 创建实体类(Entity层)

在 com.pjb.pm.entity 包中,创建 UserInfo 类(用户信息实体类)。

package com.pjb.pm.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.time.LocalDate;

/**
 * 用户信息实体类
 * @author pan_junbiao
 **/
@Data
@TableName("tb_user") //设置数据表名
public class UserInfo
{
    /**
     * 用户编号(主键、自增)
     */
    @TableId(type = IdType.AUTO) //主键生成策略:自增
    private Long userId;

    /**
     * 用户姓名
     */
    private String userName;

    /**
     * 省份
     */
    private String province;

    /**
     * 注册时间
     */
    private LocalDate createTime;

    @Override
    public String toString()
    {
        return "编号:" + this.getUserId() +" 姓名:" + this.getUserName() + " 省份:" + this.getProvince();
    }
}

2.3 创建模型类(model层)

(1)在 com.pjb.pm.model 包中,创建 BasePaging 类(公共分页类)。

package com.pjb.pm.model;

import lombok.Data;

/**
 * 公共分页类
 * @author pan_junbiao
 **/
@Data
public class BasePaging
{
    /**
     * 当前页码
     */
    private int pageIndex;

    /**
     * 分页大小
     */
    private int pageSize;

    /**
     * 排序
     */
    private String orderBy;
}

(2)在 com.pjb.pm.model 包中,创建 UserSearchParam 类(用户查询参数类),并继承 BasePaging 类(公共分页类)。

package com.pjb.pm.model;

import lombok.Data;

/**
 * 用户查询参数类
 * @author pan_junbiao
 **/
@Data
public class UserSearchParam extends BasePaging
{
    /**
     * 用户姓名
     */
    private String userName;

    /**
     * 省份
     */
    private String province;
}

2.4 业务逻辑层(Service层)

在 com.pjb.pm.service 包下,创建 UserService 接口(用户信息服务接口),并继承 IService 接口。

package com.pjb.pm.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.pjb.pm.entity.UserInfo;
import com.pjb.pm.model.UserSearchParam;

/**
 * 用户信息服务接口
 * @author pan_junbiao
 **/
public interface IUserService extends IService<UserInfo>
{
    /**
     * 分页查询用户列表
     */
    Page<UserInfo> getUserPage(UserSearchParam searchParam);
}

在 com.pjb.pm.service.impl 包下,创建 UserServiceImpl 类(用户信息服务类),并继承 ServiceImpl 类。

package com.pjb.pm.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.pjb.pm.entity.UserInfo;
import com.pjb.pm.mapper.UserMapper;
import com.pjb.pm.model.UserSearchParam;
import com.pjb.pm.service.IUserService;
import org.springframework.stereotype.Service;

/**
 * 用户信息服务类
 * @author pan_junbiao
 **/
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, UserInfo> implements IUserService
{
    /**
     * 分页查询用户列表
     */
    @Override
    public Page<UserInfo> getUserPage(UserSearchParam searchParam)
    {
        //分页参数
        Page<UserInfo> rowPage = new Page(searchParam.getPageIndex(), searchParam.getPageSize());

        //查询条件
        LambdaQueryWrapper<UserInfo> queryWrapper = new LambdaQueryWrapper<>();
        if(StringUtils.isNotEmpty(searchParam.getUserName()))
        {
            queryWrapper.like(UserInfo::getUserName,searchParam.getUserName());
        }
        if(StringUtils.isNotEmpty(searchParam.getProvince()))
        {
            queryWrapper.eq(UserInfo::getProvince,searchParam.getProvince());
        }

        //排序
        queryWrapper.orderByAsc(UserInfo::getCreateTime);

        //分页查询
        rowPage = this.baseMapper.selectPage(rowPage, queryWrapper);
        return rowPage;
    }
}

3、运行测试

【运行】查询第2页的用户数据,每页10条数据,并根据创建时间排序。

package com.pjb.pm;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.pjb.pm.entity.UserInfo;
import com.pjb.pm.model.UserSearchParam;
import com.pjb.pm.service.IUserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

/**
 * 用户业务逻辑测试类(JUnit5)
 * @author pan_junbiao
 **/
@SpringBootTest
public class UserServiceTest
{
    @Autowired
    private IUserService userService;

    /**
     * 分页查询用户列表
     * @author pan_junbiao
     */
    @Test
    public void searchUserByParam()
    {
        //分页信息
        UserSearchParam searchParam = new UserSearchParam();
        searchParam.setPageIndex(2); //查询第2页码
        searchParam.setPageSize(10); //每页10条数据
        //searchParam.setUserName("pan_junbiao的博客"); //查询条件1
        //searchParam.setProvince("广东省"); //查询条件2

        //执行分页查询
        Page<UserInfo> userInfoPage = userService.getUserPage(searchParam);

        //打印用户列表
        System.out.println("\n");
        List<UserInfo> userInfoList = userInfoPage.getRecords();
        userInfoList.stream().forEach(System.out::println);

        //打印分页信息
        System.out.println("当前页码:第" + userInfoPage.getCurrent() + "页");
        System.out.println("分页大小:每页" + userInfoPage.getSize() + "条");
        System.out.println("数据总数:共" + userInfoPage.getTotal() + "条");
        System.out.println("总页数:共" + userInfoPage.getPages() + "页\n");
    }
}

执行结果:

标签:分页,博客,junbiao,Plus,MyBatis,import,pjb,com,pan
From: https://blog.csdn.net/pan_junbiao/article/details/142616533

相关文章

  • 轻松上手MyBatis反向工程:从零到一的自动化代码生成
    前言反向工程概念:反向工程是从已有的具体实现(如数据库表结构)中推导出高层次的信息(如Java代码)的过程。在MyBatis中,它特指根据数据库表结构自动生成Java实体类、Mapper接口和XML映射文件。原理:MyBatis反向工程通过读取数据库表结构的元数据(如表名、字段名、字段类型等),然后利......
  • 深入剖析 MyBatis-Plus:操作总结、对比与实践案例(CRUD 操作、分页、条件构造器、自动填
    MyBatis-Plus是MyBatis的增强工具,它极大简化了MyBatis的配置和操作,提高了开发效率。本文从基本操作到高阶用法,详细介绍了MyBatis-Plus的常见功能及与MyBatis的区别,并通过实际案例展示其强大的扩展能力。MyBatis-Plus基于MyBatis,但旨在减少开发者的代码量,增强可......
  • Tauri2.0+Vite5聊天室|vue3+tauri2+element-plus仿微信|tauri聊天应用
    原创tauri2.0+vue3+pinai2仿QQ/微信客户端聊天Exe程序TauriWinChat。tauri2-vue3-winchat自研vite5+tauri2.0+vue3setup+element-plus跨平台仿QQ|微信桌面端聊天软件。全新封装tauri2多开窗口管理、自定义圆角阴影窗体。实现聊天、通讯录、收藏、我的、朋友圈/小视频等模块。......
  • Mybatis详细教程 (万字详解)
    Mybatis3.5.14来自于B站‘天气预报’,一名宝藏up,跟着他可以培养起独立解决编程问题的能力!!!01.简介1.1官网官方中文网:MyBatis中文网中文网参考手册1.2概念MyBatis是一款优秀的持久层框架,支持自定义SQL,存储过程,高级映射官方解释必要前置技术Mys......
  • 【2024计算机毕业设计】基于jsp+mysql+Spring+mybatis的SSM汽车维修预约平台
    运行环境:最好是javajdk1.8,我在这个平台上运行的。其他版本理论上也可以。IDE环境:Eclipse,Myeclipse,IDEA或者SpringToolSuite都可以,如果编译器的版本太低,需要升级下编译器,不要弄太低的版本tomcat服务器环境:Tomcat7.x,8.x,9.x版本均可操作系统环境:WindowsXP/7......
  • MyBatis 动态语句
    一、if和where语句<!--List<Employee>selectEmployeeByCondition(Employeeemployee);--><selectid="selectEmployeeByCondition"resultType="employee">selectemp_id,emp_name,emp_salaryfromt_emp<!--where标签会......
  • MyBatis框架02
    一、Mybatis完成CURD1.1CURD的R1.1.1CRUD的R11)在Mapper接口里添加findAll方法publicinterfaceEmployeeMapper{List<Employee>findAll();}2)在SQL映射文件中添加对应的配置<selectid="findAll"resultType="student">select*fromemp</selec......
  • 【2024计算机毕业设计】基于jsp+mysql+Spring+mybatis的SSM在线装潢家装材料进销存管
    运行环境:最好是javajdk1.8,我在这个平台上运行的。其他版本理论上也可以。IDE环境:Eclipse,Myeclipse,IDEA或者SpringToolSuite都可以,如果编译器的版本太低,需要升级下编译器,不要弄太低的版本tomcat服务器环境:Tomcat7.x,8.x,9.x版本均可操作系统环境:WindowsXP/7......
  • 按照分页预览页码拆分工作表并在打印标题区域写入相应页码信息
    适用于具备水平分页,无垂直分页的Excel工作表的情况。尽量保持原工作表格式而采用建立副本的方法,代码存在优化的可能。本文假设打印标题不低于两行。SubSplitWorkbookByPrintPages()DimwsSourceAsWorksheetDimwsDestAsWorksheetDimiAsLongDimlas......
  • 【Java】【SpringBoot】SpringBoot整合MybatisPlus(快速入门)
    较早之前,写了SpringBoot整合Mybatis:https://www.cnblogs.com/luyj00436/p/16701894.html。这个数据库的链接有过时。Mybatisplus是mybatis的增强工具。对比Mybatis功能强大、易于使用。对于复杂业务,需要连接多张表单,Mybatisplus不够灵活,隐藏了代码,也不能更好地调试;对于简单业务......