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

news/2024/7/2 1:20:45 标签: MybatisPlus, java, mybatis, 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 对象获取分页信息和查询结果)

java">/*
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如下:

java">import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

public class pagedemo {
    public static void main(String[] args) {
        // 创建分页对象,指定当前页码为1,每页记录数为10
        Page<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类:

java">	/**
	 * 自定义分页
	 */
	@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中的方法如下:

java">public interface UserService extends BaseService<User> {

	/**
	 * 自定义分页
	 *
	 * @param page
	 * @param userVO
	 * @return
	 */
	IPage<UserVO> selectUserPage(IPage<UserVO> page, UserVO userVO);

}

对应的实现类如下:

java">@Service
public class UserServiceImpl extends BaseServiceImpl<UserMapper, User> implements UserService{


	@Override
	public IPage<UserVO> selectUserPage(IPage<UserVO> page, UserVO userVO) {
		return page.setRecords(baseMapper.selectUserPage(page, userVO));
	}

}

对应的Mapper如下:

java">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.niftyadmin.cn/n/5344439.html

相关文章

ToDesk/向日葵的MAC远程鼠标控制不了?如何解决

不知道各位使用Mac电脑的小伙伴们&#xff0c;在日常进行跨设备远控操作时是否曾遇到过远程鼠标控制不了的问题&#xff1f;其实这是因为有项系统权限没有开设导致的&#xff0c;本篇文章木木小编就给大家逐步教学一下针对该问题如何解决才有效&#xff01; 当通过ToDesk远程连…

GitLab入门指南:上传与下载操作一网打尽

GitLab简介&#xff1a; GitLab是一个基于Git的开源仓库管理系统&#xff0c;提供了一个Web界面的Git存储库管理器&#xff0c;并集成了多种开发工具的功能&#xff0c;如代码审查、问题跟踪、持续集成和持续部署等。GitLab可以在本地服务器上部署&#xff0c;也可以使用其提供…

强化学习 - Policy Gradient Methods(策略梯度方法)

什么是机器学习 策略梯度方法&#xff08;Policy Gradient Methods&#xff09;是一类用于解决强化学习问题的算法&#xff0c;其目标是直接学习策略函数&#xff0c;而不是值函数。这种方法的核心思想是通过最大化或最小化策略的期望累积回报来更新策略参数。 以下是一个使用…

纯前端实现了Excel文件转JSON和JSON转Excel下载

需求前提&#xff1a; 上传Excel文件&#xff0c;并将Excel文件的内容拿出来转换为JSON本地定义JSON数据&#xff0c;然后将它封装后转换为Excel文件下载 安装依赖 这两个功能是借助xlsx包实现的&#xff0c;所以需要先安装xlsx包&#xff1a; npm install xlxs依赖引用 i…

数据分析-Pandas如何用图把数据展示出来

数据分析-Pandas如何用图把数据展示出来 俗话说&#xff0c;一图胜千语&#xff0c;对人类而言一串数据很难立即洞察出什么&#xff0c;但如果展示图就能一眼看出来门道。数据整理后&#xff0c;如何画图&#xff0c;画出好的图在数据分析中成为关键的一环。 数据表&#xff…

应用案例:Ruff工业设备数据采集,为生产制造企业数字化转型赋能

导读&#xff1a;某金属材料生产制造企业&#xff0c;引进了整套Ruff数据采集方案&#xff0c;将Ruff网关采集到的PLC数据接入到Ruff IoT管理云平台&#xff0c;帮助客户实现覆盖全厂区、车间所有设备的数字化、可视化管理&#xff0c;避免了意外停机风险&#xff0c;IT运维工作…

qml与C++的交互

qml端使用C对象类型、qml端调用C函数/c端调用qml端函数、qml端发信号-连接C端槽函数、C端发信号-连接qml端函数等。 代码资源下载&#xff1a; https://download.csdn.net/download/TianYanRen111/88779433 若无法下载&#xff0c;直接拷贝以下代码测试即可。 main.cpp #incl…

如何使用idm下载百度网盘的资源

IDM是海内外都非常受欢迎的一款下载管理软件。它支持视频媒体嗅探和多线程下载&#xff0c;能够完美替代谷歌Chrome浏览器、Edge浏览器等浏览器的原生下载功能。在浏览器中单击下载链接时&#xff0c;idm将接管浏览器的原生下载工具并加快下载速度&#xff0c;支持HTTP&#xf…