Mybatis 分页插件使用

news2024/11/26 15:38:25

1、分页插件的使用步骤

需求分析:

我们在前端界面获取用户表的时候,在界面上一次显示出成百上千条数据,用户体验,软件性能都会很糟糕,假设数据库内存储十万条记录,后端一次性返回这么多数据,前端和测试小姐姐会杀了你的。

那么,我们就考虑一次查询,返回可以接收的一组记录数,你好,我好,大家好。

这时候,最好的解决方案,就是分页查询。

1.1 添加依赖

<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.2.0</version>
</dependency>

1.2 配置分页插件

在MyBatis的核心配置文件中配置插件

<plugins>
<!--设置分页插件-->
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>

1.3 分页插件的使用:

我们运用动态Sql 给t_user 表中插入100条数据

 /**
     * 利用动态sql 批量插入数据
     */

    int insertBatch(@Param("users") List<User> users);

 

<!--   int insertBatch(List<User> users);-->
    <insert id="insertBatch" useGeneratedKeys="true" keyProperty="id">
        insert into t_user values
        <foreach collection="users" item="user" separator=",">
            (null,#{user.userName},#{user.passWord},#{user.age},#{user.gender},#{user.email})
        </foreach>
    </insert>
 @Test
    public void testInsertBatch(){
        UserMapper mapper = SqlSessionUtil.getMapper(UserMapper.class);
        List<User> users = new ArrayList<>();

        for(int i=0;i<100;i++){
            User user = new User("user"+i //username
                    , UUID.randomUUID().toString().substring(0,6) // password
                    ,i //age
                    ,i%2==0?"男":"女" //gender
                    ,i+"@gmail.com"); //email
            users.add(user);
        }
        int i = mapper.insertBatch(users);
        System.out.println("添加了 "+i+" 行记录");
    }


    /**
     * 测试密码生成器
     */
    @Test
    public void testRandom(){
        //方案1
        String str = UUID.randomUUID().toString().substring(0, 7);
        System.out.println(str);

        //方案2
        String source = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        Random random = new Random();
        StringBuffer flag = new StringBuffer();
        for(int j=0;j<6;j++){
            flag.append(source.charAt(random.nextInt(62))); //随机数产生10以内的任何一个数字,代表stringbuff下标
        }
        System.out.println(flag.toString());
    }

    /**
     * 分页测试
     */
    @Test
    public void testLimitPages(){
        UserMapper mapper = SqlSessionUtil.getMapper(UserMapper.class);
        PageHelper.startPage(2,10);
        List<User> users = mapper.getUserLimitPage();
        System.out.println(users);

        PageInfo<User> pageInfo = new PageInfo<>(users, 5);
        System.out.println(pageInfo);
    }

}

 

数据库插入成功

 

分页查询测试:

     /**
     * 分页查询
     * 你也可以根据条件去查询

     */
   List<User> getUserLimitPage();
<!--  分页查询-->
<!--    getUserLimitPage-->
    <select id="getUserLimitPage" resultMap="userMap">
        select * from t_user
    </select>


    /**
     * 分页测试
     */
    @Test
    public void testLimitPages(){
        UserMapper mapper = SqlSessionUtil.getMapper(UserMapper.class);
        PageHelper.startPage(2,10);
        List<User> users = mapper.getUserLimitPage();
        System.out.println(users);

        PageInfo<User> pageInfo = new PageInfo<>(users, 5);
        System.out.println(pageInfo);
    }

测试结果:

Page{count=true, pageNum=2, pageSize=10, startRow=10, endRow=20, total=103, pages=11, reasonable=false, pageSizeZero=false}[User{id=14, userName='user7', passWord='47a047', age=7, gender='女', email='7@gmail.com'}, User{id=15, userName='user8', passWord='20fc70', age=8, gender='男', email='8@gmail.com'}, User{id=16, userName='user9', passWord='1b59a2', age=9, gender='女', email='9@gmail.com'}, User{id=17, userName='user10', passWord='05555b', age=10, gender='男', email='10@gmail.com'}, User{id=18, userName='user11', passWord='8c89f5', age=11, gender='女', email='11@gmail.com'}, User{id=19, userName='user12', passWord='721c69', age=12, gender='男', email='12@gmail.com'}, User{id=20, userName='user13', passWord='d1ce22', age=13, gender='女', email='13@gmail.com'}, User{id=21, userName='user14', passWord='3d47e2', age=14, gender='男', email='14@gmail.com'}, User{id=22, userName='user15', passWord='7f7e24', age=15, gender='女', email='15@gmail.com'}, User{id=23, userName='user16', passWord='b877be', age=16, gender='男', email='16@gmail.com'}]


PageInfo{pageNum=2, pageSize=10, size=10, startRow=11, endRow=20, total=103, pages=11, list=Page{count=true, pageNum=2, pageSize=10, startRow=10, endRow=20, total=103, pages=11, reasonable=false, pageSizeZero=false}[User{id=14, userName='user7', passWord='47a047', age=7, gender='女', email='7@gmail.com'}, User{id=15, userName='user8', passWord='20fc70', age=8, gender='男', email='8@gmail.com'}, User{id=16, userName='user9', passWord='1b59a2', age=9, gender='女', email='9@gmail.com'}, User{id=17, userName='user10', passWord='05555b', age=10, gender='男', email='10@gmail.com'}, User{id=18, userName='user11', passWord='8c89f5', age=11, gender='女', email='11@gmail.com'}, User{id=19, userName='user12', passWord='721c69', age=12, gender='男', email='12@gmail.com'}, User{id=20, userName='user13', passWord='d1ce22', age=13, gender='女', email='13@gmail.com'}, User{id=21, userName='user14', passWord='3d47e2', age=14, gender='男', email='14@gmail.com'}, User{id=22, userName='user15', passWord='7f7e24', age=15, gender='女', email='15@gmail.com'}, User{id=23, userName='user16', passWord='b877be', age=16, gender='男', email='16@gmail.com'}], prePage=1, nextPage=3, isFirstPage=false, isLastPage=false, hasPreviousPage=true, hasNextPage=true, navigatePages=5, navigateFirstPage=1, navigateLastPage=5, navigatepageNums=[1, 2, 3, 4, 5]}
 

我们可以看到,当前页码是2,每页显示10条,刚好从第14条开始显示。(起始页码是1 ,注意我的表数据的id ,1后直接就是5)

如果你 pageNum写的是0,它返回一个空的结果集

Page{count=true, pageNum=0, pageSize=10, startRow=0, endRow=0, total=103, pages=11, reasonable=false, pageSizeZero=false}[]

注意事项:

在查询功能之前使用PageHelper.startPage(int pageNum, int pageSize)开启分页功能

pageNum:当前页的页码

pageSize:每页显示的条数

在查询获取list集合之后,使用PageInfo pageInfo = new PageInfo<>(List list, int navigatePages)获取分页相关数据

list:分页之后的数据

navigatePages:导航分页的页码数

分页相关数据:

PageInfo{ pageNum=8, pageSize=4, size=2, startRow=29, endRow=30, total=30, pages=8, list=Page{count=true, pageNum=8, pageSize=4, startRow=28, endRow=32, total=30, pages=8, reasonable=false, pageSizeZero=false}, prePage=7, nextPage=0, isFirstPage=false, isLastPage=true, hasPreviousPage=true, hasNextPage=false, navigatePages=5, navigateFirstPage4, navigateLastPage8, navigatepageNums=[4, 5, 6, 7, 8] }

pageNum:当前页的页码

pageSize:每页显示的条数

size:当前页显示的真实条数

total:总记录数

pages:总页数

prePage:上一页的页码

nextPage:下一页的页码

isFirstPage/isLastPage:是否为第一页/最后一页

hasPreviousPage/hasNextPage:是否存在上一页/下一页

navigatePages:导航分页的页码数

navigatepageNums:导航分页的页码,[1,2,3,4,5]

_______________________________________________________________________________________________

git推送到远程仓库的时候(push),容易报 OpenSSL SSL_read: Connection was reset, errno 10054

在本地仓库文件夹下 bash里输入:

git config --global http.sslVerify "false"
 

再不行,就科学上网吧。

代码仓库地址:

GitHub - Chai-Feng/git-demo01

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

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

相关文章

C语言深度解剖-关键字(2)

目录 1.关键字 static 源文件与头文件 static修饰全局变量 static修饰局部变量 写在最后&#xff1a; 1.关键字 static 源文件与头文件 平时我们在练习的时候&#xff0c;都只会开一个用来测试的源文件&#xff0c; 但是&#xff0c;当我们在写一个项目的时候&#xff…

Hal GPIO控制--LED/Delay实现

环境配置在CubeMx Pinout view 中点击可以设置管脚模式 &#xff0c;右击 可以配置管脚名称这里以点PB8灯为例&#xff0c;可以设置灯输出电平 &#xff0c;模式为输出&#xff0c;不进行上下拉&#xff0c; 速度 模式设置以及用户自定义名称。。时钟树配置&#xff0c;使用HSI…

FreeRTOS源码获取-->FreeRTOS移植-->FreeRTOS源码文件了解 | FreeRTOS二

目录 说明&#xff1a; 一、获取源码 1.1、FreeRTOS官网获取 1.2、正点原子开发板A盘资料\6&#xff0c;软件资料\13&#xff0c;版本-->V10.4.6 二、移植源码 2.1、移植步骤 2.1.1、添加源码、头文件路径 2.1.2、添加FreeRTOSConfig.h文件路径 2.1.3、添加或修改相…

VisualSVN Server Enterprise 5.1.1 Crack

VisualSVN Server 提供以下主要功能。 Active Directory 单点登录 允许用户使用他们当前的 Active Directory 域凭据访问 VisualSVN Server。使用安全 Kerberos V5 或 NTLM 身份验证协议。支持双因素身份验证和智能卡。 多站点存储库复制 使用 VisualSVN 分布式文件系统 (VDF…

MySQL基础(1)—— 卸载与安装

文章目录MySQL卸载【windows】1、停止MySQL服务2、软件的卸载2.1 通过控制面板卸载软件2.2 通过360软件管家等第三方软件进行删除2.3 通过MySQL安装包提供的卸载功能卸载3、残余文件的清理4、清理注册表5、删除环境变量配置MySQL安装【windows】1、下载安装包2、安装3、配置环境…

Sharding-JDBC(六)5.1.0版本,实现按月分表、自动建表、自动刷新节点

目录1.Maven 依赖2.创建表结构3.yml 配置4.TimeShardingAlgorithm.java 分片算法类5.ShardingAlgorithmTool.java 分片工具类6.ShardingTablesLoadRunner.java 初始化缓存类7.SpringUtil.java Spring工具类8.源码测试9.测试结果10.代码地址背景&#xff1a; 项目用户数据库表量…

vscode运行C/C++程序

一、vsocde对C/C的支持 Visual Studio Code对C/C语言的支持由Microsoft C/C扩展程序提供。它使得C/C在Windows、Linux和macOS等跨平台开发成为可能。 二、安装扩展程序 打开VS Code软件选择任务栏上的扩展视图图标&#xff08;下图红色方框&#xff09;或使用快捷键(CtrlShif…

【自然语言处理】情感分析(四):基于 Tokenizer 和 Word2Vec 的 CNN 实现

情感分析&#xff08;四&#xff09;&#xff1a;基于 Tokenizer 和 Word2Vec 的 CNN 实现本文是 情感分析 系列的第 444 篇&#xff0c;前三篇分别是&#xff1a; 【自然语言处理】情感分析&#xff08;一&#xff09;&#xff1a;基于 NLTK 的 Naive Bayes 实现【自然语言处…

服务发现Discovery和Eureka自我保护机制

目录 一、服务发现Discovery ​二、Eureka自我保护 &#xff08;一&#xff09;故障现象 &#xff08;二&#xff09;导致原因 &#xff08;三&#xff09;怎么禁止自我保护 三、Eureka2.0的停更 一、服务发现Discovery 对于注册进eureka里面的微服务&#xff0c;可以通…

外挂、破解软件理论与实战

外挂、破解软件理论与实战 1 理论 1.1 不同操作系统下的可执行文件 Windows【PE】 PE 格式&#xff0c;可移植可执行格式&#xff08;Portable Executable&#xff09;&#xff0c; 是 Windows 下的主要可执行文件格式。别被名字迷惑了&#xff0c;PE 文件必须是 Windows 下…

第四十六章 动态规划——状态机模型

第四十六章 动态规划——状态机模型一、通俗理解状态机DP1、什么是状态机2、什么是状态机DP二、例题1、AcWing 1049. 大盗阿福&#xff08;1&#xff09;问题&#xff08;2&#xff09;分析a.状态定义b.状态转移c.循环设计d.初末状态&#xff08;3&#xff09;代码2、AcWing 10…

C++学习/温习:新型源码学编程(三)

写在前面(祝各位新春大吉&#xff01;兔年如意&#xff01;) 【本文持续更新中】面向初学者撰写专栏&#xff0c;个人原创的学习C/C笔记&#xff08;干货&#xff09;所作源代码输出内容为中文&#xff0c;便于理解如有错误之处请各位读者指正请读者评论回复、参与投票&#xf…

01 课程简介、HTML标签【尚硅谷JavaWeb教程】

1. 课程体系设计 2. HTML标签 服务器—浏览器&#xff08;字符串"" &#xff09; demo01.html 1&#xff09;html语言是解释型语言&#xff0c;不是编译型 浏览器是容错的 2&#xff09;html页面中由一对标签组成&#xff1a; < html>称为 开始标签 < /htm…

Java基础语法——数组概念、数组内存图解(一个数组、二个数组)及二元数组的应用

目录 数组概述 数组定义格式 数组概念 数组的定义格式 数组的初始化 数组初始化概述 数组的初始化方式 Java中的内存分配 Java中一个数组的内存图解 Java中二个数组的内存图解 两个数组指向同一个地址的内存图解 数组操作中两个常见的小问题 二维数组 二维数组概述…

c++11 标准模板(STL)(std::forward_list)(十一)

定义于头文件 <forward_list> template< class T, class Allocator std::allocator<T> > class forward_list;(1)(C11 起)namespace pmr { template <class T> using forward_list std::forward_list<T, std::pmr::polymorphic_…

前端架构处理Cookie、Session、Token

1. Cookie Cookie 总是保存在客户端中。按在客户端中的存储位置&#xff0c;可分为内存 Cookie 和硬盘 Cookie。 内存 Cookie 由浏览器维护&#xff0c;保存在内存中&#xff0c;浏览器关闭后就消失了&#xff0c;其存在时间是短暂的。硬盘 Cookie 保存在硬盘里&#xff0c;…

Spring Boot、Spring MVC热部署

一、相关概述 JVM能够识别的是字节码.class文件每次重新运行都是一个重新编译的过程&#xff0c;也就是说会生成新的target字节码文件&#xff1b;但是每次修改了代码之后也必须要重新运行&#xff0c;这样比较麻烦。热部署就能较好地解决该问题&#xff0c;直接刷新页面就可以…

(22)go-micro微服务kibana使用

文章目录一 kibana介绍二 Kibana主要功能三 Kibana侧边栏四 Kibana安装1.拉取镜像2.运行命令3.查看是否运行五 Kibana使用六 Kibana图形化界面七 最后一 kibana介绍 Kibana &#xff1a;是一个开源的分析和可视化平台&#xff0c;旨在与 Elasticsearch 合作。Kibana 提供搜索、…

初识Nonebot2

文章目录什么是nonebot2&#xff1f;机器人工作流程WebSocket协议OneBot标准Nonebot2框架工作路径什么是nonebot2&#xff1f; 关于NoneBot2&#xff0c;我们先来引用一下官方文档的描述 NoneBot2是一个可扩展的 Python 异步机器人框架&#xff0c;它会对机器人收到的事件进行…

创建进度条 tqdm模块

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 创建进度条 tqdm模块 选择题 以下python代码最后输出错误的一项是? from tqdm import tqdm import time text{loss:0.2,learn:0.8} print(【开始执行】) for i in tqdm(range(50)…