首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 25-03-03 14:23
  • 4747
  • 10485
blog.csdn.net

目录

  • 前言
  • 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());
  • 1
  • 2
  • 3
  • 4
  • 5

2. 常用方法

构造方法:

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

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

在这里插入图片描述

常用方法:

  • setRecords(List 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,每页记录数为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());
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

截图如下:

在这里插入图片描述

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);
	}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

对应Service中的方法如下:

public interface UserService extends BaseService<User> {

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

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

对应的实现类如下:

@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));
	}

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

对应的Mapper如下:

public interface UserMapper extends BaseMapper<User> {

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

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

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


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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

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

文章知识点与官方知识档案匹配,可进一步学习相关知识
Java技能树首页概览145194 人正在系统学习中
码农研究僧
微信公众号
1.框架等前沿技术 2.日常生活 3.技术交流
注:本文转载自blog.csdn.net的码农研究僧的文章"https://blog.csdn.net/weixin_47872288/article/details/135771660"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top