详细分析MybatisPlus中的Page类(附实战)

目录

  • 前言
  • 1. 基本知识
  • 2. 常用方法
  • 3. 实战

前言

由于工作中经常使用到MybatisPlus的框架,对此详细连接Page类有利于开发,更加游刃有余

对于该类的源码:baomidou / mybatis-plus 中的Page源码

  1. MybatisPlus的框架:MyBatis-plus从入门到精通(全)
  2. 实战中的其他CRUD:【Java项目】实战CRUD的功能整理(持续更新)
  3. 学习JAVA其他框架:java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)

1. 基本知识

主要的包来源于:com.baomidou.mybatisplus.extension.plugins.pagination.Page ,这个才是 MyBatis-Plus 框架中的分页类。需要与其他Page包区分开!

一、概念

Page 类是用于封装分页信息的 Java 类,它主要用于在数据库查询时支持分页查询操作。

二、分页查询的作用

  • 提高查询性能:当数据库中数据量庞大时,一次性查询所有数据可能导致性能问题。通过分页查询,可以限制每次查询的数据量,提高查询性能。
  • 减轻数据库负担:分页查询可以减轻数据库的负担,降低资源消耗,特别是在大型数据集的情况下。

三、支持不同数据库的分页查询

MyBatis-Plus 的 Page 类封装了不同数据库的分页查询语句,使得在不同数据库中实现分页更加灵活。

四、常见用法

在 MyBatis-Plus 中,通常会将 Page 对象传递给查询方法,然后在查询中使用它的信息进行分页操作,以获取指定页的数据。

五、分页查询的关键属性

  • current:当前页码,表示当前查询的是第几页的数据。
  • size:每页记录数,表示每页显示多少条记录。
  • total:总记录数,表示满足查询条件的总记录数。
  • pages:总页数,通过总记录数和每页记录数计算得出。

六、分页查询的方法链式调用

MyBatis-Plus 的 Page 类支持方法链式调用,可以通过链式调用设置和获取分页信息,使代码更加简洁。
(通过 page 对象获取分页信息和查询结果)

/*
selectPage 方法是 MyBatis-Plus 提供的分页查询方法,它会根据传入的 Page 对象进行分页查询,并将结果设置回 Page 对象中
*/
Page<User> page = new Page<>(1, 10);
page.setRecords(userMapper.selectPage(page, new QueryWrapper<User>().eq("status", 1)).getRecords());

2. 常用方法

构造方法:

  • Page(long current, long size):通过指定当前页码和每页记录数创建分页对象。
  • Page(long current, long size, long total):通过指定当前页码、每页记录数和总记录数创建分页对象。

其属性除了上面的四个还有如下:

在这里插入图片描述

常用方法:

  • setRecords(List<T> records):设置当前页的记录列表。
  • getRecords():获取当前页的记录列表。
  • setTotal(long total):设置总记录数。
  • getTotal():获取总记录数。
  • setCurrent(long current):设置当前页码。
  • getCurrent():获取当前页码。
  • setSize(long size):设置每页记录数。
  • getSize():获取每页记录数。
  • getPages():计算总页数。
  • hasPrevious():判断是否有上一页。
  • hasNext():判断是否有下一页。

示例的Demo如下:

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;public class pagedemo {public static void main(String[] args) {// 创建分页对象,指定当前页码为1,每页记录数为10Page<String> page = new Page<>(1, 10);// 模拟从数据库中查询总记录数long total = 100;page.setTotal(total);// 输出分页信息System.out.println("当前页码:" + page.getCurrent());System.out.println("每页记录数:" + page.getSize());System.out.println("总记录数:" + page.getTotal());System.out.println("总页数:" + page.getPages());System.out.println("是否有上一页:" + page.hasPrevious());System.out.println("是否有下一页:" + page.hasNext());}
}

截图如下:

在这里插入图片描述

3. 实战

以实战来分析后端对于该类是如何操作的!

对于自定义分页的Controller类:

	/*** 自定义分页*/@GetMapping("/page")@ApiOperationSupport(order = 3)@ApiOperation(value = "分页", notes = "传入User")public R<IPage<UserVO>> page(UserVO userVO, Query query) {IPage<UserVO > pages = userService.selectUserPage(Condition.getPage(query), userVO);return R.data(pages);}

对应Service中的方法如下:

public interface UserService extends BaseService<User> {/*** 自定义分页** @param page* @param userVO* @return*/IPage<UserVO> selectUserPage(IPage<UserVO> page, UserVO userVO);}

对应的实现类如下:

@Service
public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implements UserService{@Overridepublic IPage<UserVO> selectUserPage(IPage<UserVO> page, UserVO userVO) {return page.setRecords(baseMapper.selectUserPage(page, userVO));}}

对应的Mapper如下:

public interface UserMapper extends BaseMapper<User> {/*** 自定义分页** @param page* @param tyreRepareOrderVO* @return*/List<UserVO> selectUserPage(IPage page, UserVO userVO);}

其中selectUserPage涉及xml文件,主要与数据库对接:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.xx.mapper.UserMapper"><!-- 通用查询映射结果 --><resultMap id="userResultMap" type="org.xx.entity.UserMapper"><result column="id" property="id"/><result column="create_user" property="createUser"/><result column="create_dept" property="createDept"/></resultMap><select id="selectUserPage" resultMap="userResultMap">select * from User where is_deleted = 0</select></mapper>

对于上述框架还涉及Mybatis的基本知识,可看这篇文章进行补充:Mybatis从入门到精通(全)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/645420.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【操作系统基础】【CPU访存原理】:寄存 缓存 内存 外存、内存空间分区、虚拟地址转换、虚拟地址的映射

存储器怎么存储数据、内存空间分区、虚拟地址转换 计算机的存储器&#xff1a;寄存 缓存 内存 外存&#xff08;按功能划分&#xff09; 计算机的处理器需要一个存储器来存储大量的指令和数据以便自己不断取指执行和访问数据。 内存&#xff08;内存就是运行内存&#xff0c…

java web 校园健康管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web校园健康管理系统是一套完善的java web信息管理系统 &#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysq…

宠物空气净化器怎么挑选?猫用空气净化器品牌性比价推荐

作为一个养猫家庭的主人&#xff0c;每天都要面对一个挑战——清理猫砂盆。那种难以形容的气味实在让人受不了。尤其是家里有小孩和老人&#xff0c;他们偶尔可能会出现过敏性鼻炎等问题&#xff0c;而抵抗力较差的人更容易受到影响。此外&#xff0c;一到换毛季节&#xff0c;…

【基础算法练习】二分模板

文章目录 二分模板题二分的思想C 版本的二分整数二分模板 Golang 版本的二分整数二分模板 例题&#xff1a;在排序数组中查找元素的第一个和最后一个位置题目描述C 版本代码Golang 版本代码 二分模板题 704. 二分查找&#xff0c;这道题目是最经典的二分查找&#xff0c;使用于…

Spring依赖注入之setter注入与构造器注入以及applicationContext.xml配置文件特殊值处理

依赖注入之setter注入 在管理bean对象的组件的时候同时给他赋值&#xff0c;就是setter注入&#xff0c;通过setter注入&#xff0c;可以将某些依赖项标记为可选的&#xff0c;因为它们不是在构造对象时立即需要的。这种方式可以减少构造函数的参数数量&#xff0c;使得类的构…

天津大数据培训班推荐,数据分析过程的常见错误

大数据”是近年来IT行业的热词&#xff0c;目前已经广泛应用在各个行业。大数据&#xff0c;又称海量信息&#xff0c;特点是数据量大、种类多、实时性强、数据蕴藏的价值大。大数据是对大量、动态、能持续的数据&#xff0c;通过运用分析、挖掘和整理&#xff0c;实现数据信息…

生产力工具|卸载并重装Anaconda3

一、Anaconda3卸载 &#xff08;一&#xff09;官方方案一&#xff08;Uninstall-Anaconda3-不能删除配置文件&#xff09; 官方推荐的方案是两种&#xff0c;一种是直接在Anaconda的安装路径下&#xff0c;双击&#xff1a; &#xff08;可以在搜索栏或者使用everything里面搜…

Windows10上通过MSYS2编译FFmpeg 6.1.1源码操作步骤

1.从github上clone代码&#xff0c;并切换到n6.1.1版本&#xff1a;clone到D:\DownLoad目录下 git clone https://github.com/FFmpeg/FFmpeg.git git checkout n6.1.1 2.安装MSYS2并编译FFmpeg源码: (1).从https://www.msys2.org/ 下载msys2-x86_64-20240113.exe &#…

超优秀的三维模型轻量化、格式转换、可视化部署平台!

1、基于 HTML5 和 WebGL 技术&#xff0c;可在主流浏览器上进行快速浏览和调试&#xff0c;支持PC端和移动端 2、自主研发 AMRT 展示框架和9大核心技术&#xff0c;支持3D模型全网多端流畅展示与交互 3、提供格式转换、减面展UV、烘焙等多项单模型和倾斜摄影模型轻量化服务 4、…

Java实现对系统CPU、内存占用率的控制

背景&#xff1a;由于使用的业主的云资源&#xff0c;由于使用率低&#xff0c;会不持续的缩减服务器配置。为了避免后续由于新业务上线&#xff0c;需要更多资源的时候&#xff0c;无法再次获得资源&#xff08;回收容易&#xff0c;申请难&#xff09;。 问题&#xff1a;怎…

Git学习笔记(第9章):国内代码托管中心Gitee

目录 9.1 简介 9.1.1 Gitee概述 9.1.2 Gitee帐号注册和登录 9.2 VSCode登录Gitee账号 9.3 创建远程库 9.4 本地库推送到远程库(push) 9.5 导入GitHub项目 9.6 删除远程库 9.1 简介 9.1.1 Gitee概述 众所周知&#xff0c;GitHub服务器在国外&#xff0c;使用GitHub作为…

3.1集合-Set+集合-list

一、数据结构 1.1什么是数据结构 数据结构就是用来装数据以及数据与之间关系的一种集合&#xff0c;如何把相关联的数据存储到计算机&#xff0c;为后续的分析提供有效的数据源&#xff0c;是数据结构产生的由来。数据结构就是计算机存储、组织数据的方式。好的数据结构&…

数据结构·单链表

不可否认的是&#xff0c;前几节我们讲解的顺序表存在一下几点问题&#xff1a; 1. 中间、头部的插入和删除&#xff0c;需要移动一整串数据&#xff0c;时间复杂度O(N) 2. 增容需要申请新空间&#xff0c;拷贝数据&#xff0c;释放旧空间。会有不小的消耗 3. 增容一般是2倍的增…

01、领域驱动设计:微服务设计为什么要选择DDD总结

目录 1、前言 2、软件架构模式的演进 3、微服务设计和拆分的困境 4、为什么 DDD适合微服务 5、DDD与微服务的关系 6、总结 1、前言 我们知道&#xff0c;微服务设计过程中往往会面临边界如何划定的问题&#xff0c;不同的人会根据自己对微服务的理 解而拆分出不同的微服…

Linux 下 TFTP 服务搭建及 U-Boot 中使用 tftp 命令实现文件下载

目录 搭建 TFTP 服务文件下载更多内容 TFTP&#xff08;Trivial File Transfer Protocol&#xff0c;简单文件传输协议&#xff09;是 TCP/IP 协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议&#xff0c;提供不复杂、开销不大的文件传输服务&#xff0c;端口号…

解决TortoiseGit软件Git Show log时显示Too many files to display的问题

1 问题描述 有时代码提交修改的文件比较多&#xff0c;当查看log时无法显示出来修改的文件列表&#xff0c;如下所示&#xff1a; 2 解决方法 将LogTooManyItemsThreshold尽可能配置得大一些。 三 参考资料 https://gitlab.com/tortoisegit/tortoisegit/-/issues/3878

C++补充篇- C++11 及其它特性

目录 explicit 关键字 左值和右值的概念 函数返回值当引用 C11 新增容器 - array C的类型转换 static_cast reinterpret_cast dynamic_cast const_cast C智能指针 auto_ptr 使用详解 (C98) unique_ptr 使用详解 (C11) auto_ptr的弊端 unique_ptr严谨auto_ptr的弊端 unique_…

JVM实战(30)——模拟堆内存溢出

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 学习必须往深处挖&…

ME51N屏幕增强——添加历史订单价格字段

参考&#xff1a; 资料&#xff1a;SAP所有模块用户出口(User Exits) _coopa003-CSDN博客 SAP ABAP常用增强记录文档_sap自动过账增强-CSDN博客 https://www.cnblogs.com/zyhcs/p/15759434.html 需求&#xff1a; 增加给OA传输接口的字段。 采购申请增加历史价格显示。 已经…

Android 水印效果

Android 水印效果 本文主要介绍下android 中水印的实现效果. 实现的方式有多种,就不一一赘述了, 本文就是通过自定义drawable来实现水印. 不多说,直接上代码吧: import android.content.Context; import android.content.res.Resources; import android.graphics.Canvas; i…