SpringBoot进阶之Mybatis分页插件
mhr18 2024-11-19 06:53 18 浏览 0 评论
SpringBoot进阶之Mybatis分页插件
前言
大家好,一直以来我都本着 用最通俗的话理解核心的知识点, 我认为所有的难点都离不开 「基础知识」 的铺垫
适合人群
- 学完Java基础
- 想通过Java快速构建web应用程序
- 想学习或了解SpringBoot
「大佬可以绕过 ~」
背景
如果你是一路看过来的,很高兴你能够耐心看完。之前带大家学了Springboot基础部分,对基本的使用有了初步的认识, 接下来的几期内容将会带大家进阶使用,会先讲解基础中间件的使用和一些场景的应用,或许这些技术你听说过,没看过也没关系,我会带大家一步一步的入门,耐心看完你一定会有收获~
情景回顾
上期带大家学习了Springboot中如何集成redis以及它的一个基本使用, 本期将带大家学习mybatis的一个分页插件的使用,同样的,我们集成到Springboot中。最近github可能会被墙,所以我把源码放到了国内gitee上,本节我们依然使用上期的代码
往期内容
- 我的博客
- Springboot入门
- Springboot基础(一)
- Springboot基础(二)
- Springboot基础(三)
- Springboot基础(四)
- Springboot基础(五)
- SpringBoot进阶之缓存中间件Redis
项目源码(持续更新??)
- springboot-all
为什么需要分页?
分页好比你买的书一样,它内容多了,总不能放一页吧,一页也放不下,所以得分页,第一页翻完就翻第二页,所以很好理解。在程序中,一般分页常用于列表的接口比如用户列表、文章列表等等,而列表项的数据一般都返回很简单的数据用于前端展示,详情页一般会展示比较全的一个数据,所以大家写接口的时候可以注意下,不要全部返回数据。有的详情是要带着权限去查询的,如果列表就返回了全部数据,万一对方是个懂技术的,不就曝光了表里的全部数据了。
我们再说一下分页的算法, 分页里主要有两个变量一个是page, 另一个是pageSize,一般由前端传过来,服务端会接收这两个数值,在接收的时候要判断一下,如果对方为空或者0,你可以设置一个基础值比如page=1, pageSize=10,不至于用户看到的是空列表
其实分页,在sql中就可以做分页功能了,之前讲mysql没给大家介绍,主要是想结合这一节一起讲。那么sql怎么做分页呢?以之前的用户角色列表为例:
SELECT * from user_role LIMIT 10 OFFSET 0
同样的,主要是limit, offset这两个值, 第一个很好理解,限制数量,就是一页多少个数据,第二个也很好理解,位移,就是向下位移多少条数据,一般可以通过如下公式计算:
limit = pageSize
offset = pageSize * (page -1)
很简单的数学题,不要说不会 ~
使用sql进行分页
好,有了以上基础,大家可以自行试一下,在**Mapper.xml写一下试试,这种方式也是可以的, 下面给大家介绍个神器
集成分页插件
同样的,修改一下我们的pom.xml
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.10</version>
</dependency>
怎么使用?
这里直接帮大家封装好,因为一般列表项数据主要涉及几个属性, list(数据), total(总条数), pageSize(一页多少条), pageNum(当前第几页),主要涉及这几项,因为前端一般也会根据这几个值,进行列表,页码的一个展示,好,我们直接看代码:
public class CommonPage<T> {
private Integer pageNum;
private Integer pageSize;
private Long total;
private List<T> list;
/**
* 将PageHelper分页后的list转为分页信息
*/
public static <T> CommonPage<T> restPage(List<T> list) {
CommonPage<T> result = new CommonPage<T>();
PageInfo<T> pageInfo = new PageInfo<T>(list);
result.setPageNum(pageInfo.getPageNum());
result.setPageSize(pageInfo.getPageSize());
result.setTotal(pageInfo.getTotal());
result.setList(pageInfo.getList());
return result;
}
public static void setPageHelper(Integer pageNum, Integer pageSize) {
if(pageNum == null || pageNum <= 0) {
pageNum = 1;
}
if(pageSize == null || pageSize <= 0) {
pageSize = 10;
}
if(pageSize >= 20) {
pageSize = 20;
}
PageHelper.startPage(pageNum, pageSize);
}
public Integer getPageNum() {
return pageNum;
}
public void setPageNum(Integer pageNum) {
this.pageNum = pageNum;
}
public Integer getPageSize() {
return pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
public List<T> getList() {
return list;
}
public void setList(List<T> list) {
this.list = list;
}
public Long getTotal() {
return total;
}
public void setTotal(Long total) {
this.total = total;
}
}
然后,我们去调用它, 修改我们之前写的列表:
@GetMapping("role/list")
@ResponseBody
public CommonPage<UserRole> getUserRole() {
CommonPage.setPageHelper(1, 10);
List<UserRole> list = userRoleMapper.getRoles();
return CommonPage.restPage(list);
}
请求成功后会返回如下:
{
"pageNum": 1,
"pageSize": 10,
"total": 1,
"list": [
{
"id": 1,
"name": "普通用户123",
"roleName": "普通用户"
}
]
}
其实它的原理,也是对sql进行了改写,进行了sql查询, 底层主要依赖mybatis的拦截器进行实现的, 这里不给大家过多深入讲解,后边会给大家介绍,我们先熟练掌握它的一个基本使用。
结束语
本期就到这里结束了,总结一下,本节主要带大家学习了sql如何进行分页查询和介绍了mybatis 分页插件的基本使用,建议大家多去试着写写
下期预告
下期带大家学习springboot中,如何处理跨域问题, 如果你不知道啥事跨域,我会从头说起。 我们下期不见不散, 关注我,不迷路~
相关推荐
- 【推荐】一个开源免费、AI 驱动的智能数据管理系统,支持多数据库
-
如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!.前言在当今数据驱动的时代,高效、智能地管理数据已成为企业和个人不可或缺的能力。为了满足这一需求,我们推出了这款开...
- Pure Storage推出统一数据管理云平台及新闪存阵列
-
PureStorage公司今日推出企业数据云(EnterpriseDataCloud),称其为组织在混合环境中存储、管理和使用数据方式的全面架构升级。该公司表示,EDC使组织能够在本地、云端和混...
- 对Java学习的10条建议(对java课程的建议)
-
不少Java的初学者一开始都是信心满满准备迎接挑战,但是经过一段时间的学习之后,多少都会碰到各种挫败,以下北风网就总结一些对于初学者非常有用的建议,希望能够给他们解决现实中的问题。Java编程的准备:...
- SQLShift 重大更新:Oracle→PostgreSQL 存储过程转换功能上线!
-
官网:https://sqlshift.cn/6月,SQLShift迎来重大版本更新!作为国内首个支持Oracle->OceanBase存储过程智能转换的工具,SQLShift在过去一...
- JDK21有没有什么稳定、简单又强势的特性?
-
佳未阿里云开发者2025年03月05日08:30浙江阿里妹导读这篇文章主要介绍了Java虚拟线程的发展及其在AJDK中的实现和优化。阅前声明:本文介绍的内容基于AJDK21.0.5[1]以及以上...
- 「松勤软件测试」网站总出现404 bug?总结8个原因,不信解决不了
-
在进行网站测试的时候,有没有碰到过网站崩溃,打不开,出现404错误等各种现象,如果你碰到了,那么恭喜你,你的网站出问题了,是什么原因导致网站出问题呢,根据松勤软件测试的总结如下:01数据库中的表空间不...
- Java面试题及答案最全总结(2025版)
-
大家好,我是Java面试陪考员最近很多小伙伴在忙着找工作,给大家整理了一份非常全面的Java面试题及答案。涉及的内容非常全面,包含:Spring、MySQL、JVM、Redis、Linux、Sprin...
- 数据库日常运维工作内容(数据库日常运维 工作内容)
-
#数据库日常运维工作包括哪些内容?#数据库日常运维工作是一个涵盖多个层面的综合性任务,以下是详细的分类和内容说明:一、数据库运维核心工作监控与告警性能监控:实时监控CPU、内存、I/O、连接数、锁等待...
- 分布式之系统底层原理(上)(底层分布式技术)
-
作者:allanpan,腾讯IEG高级后台工程师导言分布式事务是分布式系统必不可少的组成部分,基本上只要实现一个分布式系统就逃不开对分布式事务的支持。本文从分布式事务这个概念切入,尝试对分布式事务...
- oracle 死锁了怎么办?kill 进程 直接上干货
-
1、查看死锁是否存在selectusername,lockwait,status,machine,programfromv$sessionwheresidin(selectsession...
- SpringBoot 各种分页查询方式详解(全网最全)
-
一、分页查询基础概念与原理1.1什么是分页查询分页查询是指将大量数据分割成多个小块(页)进行展示的技术,它是现代Web应用中必不可少的功能。想象一下你去图书馆找书,如果所有书都堆在一张桌子上,你很难...
- 《战场兄弟》全事件攻略 一般事件合同事件红装及隐藏职业攻略
-
《战场兄弟》全事件攻略,一般事件合同事件红装及隐藏职业攻略。《战场兄弟》事件奖励,事件条件。《战场兄弟》是OverhypeStudios制作发行的一款由xcom和桌游为灵感来源,以中世纪、低魔奇幻为...
- LoadRunner(loadrunner录制不到脚本)
-
一、核心组件与工作流程LoadRunner性能测试工具-并发测试-正版软件下载-使用教程-价格-官方代理商的架构围绕三大核心组件构建,形成完整测试闭环:VirtualUserGenerator(...
- Redis数据类型介绍(redis 数据类型)
-
介绍Redis支持五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)及Zset(sortedset:有序集合)。1、字符串类型概述1.1、数据类型Redis支持...
- RMAN备份监控及优化总结(rman备份原理)
-
今天主要介绍一下如何对RMAN备份监控及优化,这里就不讲rman备份的一些原理了,仅供参考。一、监控RMAN备份1、确定备份源与备份设备的最大速度从磁盘读的速度和磁带写的带度、备份的速度不可能超出这两...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle位图索引 (63)
- oracle批量插入数据 (62)
- oracle事务隔离级别 (53)
- oracle 空为0 (50)
- oracle主从同步 (55)
- oracle 乐观锁 (51)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)