MyBatisPlus(SpringBoot版)的分页插件
目录
一、前置工作:
1.整体项目目录结构
2.创建普通javamaven项目。
3.导入依赖,改造成springboot项目
4.配置启动类
5.创建service接口及其实现类
6.创建接口Mapper
7.配置数据源
8.创建数据库表
二、使用MP(mybatisplus)的分页插件
二、使用自定义的分页插件
MyBatis Plus自带分页插件,只要简单的配置即可实现分页功能。
一、前置工作:
1.整体项目目录结构

2.创建普通javamaven项目。
3.导入依赖,改造成springboot项目
依赖:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.qcby</groupId><artifactId>SpringBootMybatisPlus</artifactId><version>1.0-SNAPSHOT</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.0</version><relativePath/> <!-- lookup parent from repository --></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.1</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.46</version><scope>runtime</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
4.配置启动类
package com.qcby;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@MapperScan("com.qcby.SpringBoot.mapper")
public class SpringBootApplication1 {public static void main(String[] args) {SpringApplication.run(SpringBootApplication1.class, args);}
}
5.配置实体类
package com.qcby.SpringBoot.pojo;import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;@Data
@TableName("t_product")
public class Product {private Long id;private String name;private Integer price;private Integer version;
}
package com.qcby.SpringBoot.pojo;import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data //set和get方法
@AllArgsConstructor //全参构造器
@NoArgsConstructor //无参构造器
@TableName("t_user")
public class User {//因为用到雪花算法,所以用Long属性@TableIdprivate Long id;private String name;private Integer age;private String email;@TableLogicprivate Integer isDeleted;
}
5.创建service接口及其实现类
package com.qcby.SpringBoot.service;import com.baomidou.mybatisplus.extension.service.IService;
import com.qcby.SpringBoot.pojo.User;/*** UserService继承IService模板提供的基础功能*/
public interface UserService extends IService<User> {
}
package com.qcby.SpringBoot.service.Impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qcby.SpringBoot.mapper.UserMapper;
import com.qcby.SpringBoot.pojo.User;
import com.qcby.SpringBoot.service.UserService;
import org.springframework.stereotype.Service;/*** ServiceImpl实现了IService,提供了IService中基础功能的实现* 若ServiceImpl无法满足业务需求,则可以使用自定的UserService定义方法,并在实现类中实现*/
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {}
6.创建接口Mapper
package com.qcby.SpringBoot.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qcby.SpringBoot.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;@Mapper
public interface UserMapper extends BaseMapper<User> {}
package com.qcby.SpringBoot.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qcby.SpringBoot.pojo.Product;
import org.apache.ibatis.annotations.Mapper;@Mapper
public interface ProductMapper extends BaseMapper<Product> {
}
7.配置数据源
在application.yaml中配置信息。
spring:# 配置数据源信息datasource:# 配置数据源类型type: com.zaxxer.hikari.HikariDataSource# 配置连接数据库信息driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf-8&useSSL=falseusername: rootpassword: root
# 配置MyBatis日志
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
8.创建数据库表


二、使用MP(mybatisplus)的分页插件
首先要在容器中配置一个mybatisplus分页插件的bean。
可以自定义一个配置类,也可以在启动类中配置,因为启动类也是一个配置类。
package com.qcby.SpringBoot.config;import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MybatisPlusConfig {/*** 分页插件* 构建一个拦截来处理分页* 每个数据库厂商对于分页的实现语法有差别,因此,在声明该拦截时,需要指定应用的数据库类型* @return*/@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(newPaginationInnerInterceptor(DbType.MYSQL));//由于各个数据库的语法会有差别,因此,要指明数据库类型return interceptor;}
}
编写测试类
package com.qcby;import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qcby.SpringBoot.mapper.ProductMapper;
import com.qcby.SpringBoot.mapper.UserMapper;
import com.qcby.SpringBoot.pojo.Product;
import com.qcby.SpringBoot.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.List;@SpringBootTest
public class Test2 {@Autowiredprivate UserMapper userMapper;@Autowiredprivate ProductMapper productMapper;@Testpublic void testPage(){//设置分页参数Page<User> page = new Page<>(1, 5);userMapper.selectPage(page, null);//获取分页数据List<User> list = page.getRecords();list.forEach(System.out::println);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());}}
二、使用自定义的分页插件
在usermapper中加入方法
package com.qcby.SpringBoot.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qcby.SpringBoot.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;@Mapper
public interface UserMapper extends BaseMapper<User> {/*** 根据年龄查询用户列表,分页显示* @param page 分页对象 ,xml中可以从里面进行取值 ,传递参数 Page 即自动分页 ,必须放在第一位* @param age 年龄* @return*//*** 不用加limit语句,因为配置了一个拦截的插件,只需要传入page对象,还是使用的MP的分页插件* @param page* @param age* @return*/@Select("SELECT id,name,age,email FROM t_user WHERE age > #{age}")IPage<User> selectPageVo(@Param("page") Page<User> page, @Param("age") Integer age);
}
package com.qcby;import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.qcby.SpringBoot.mapper.ProductMapper;
import com.qcby.SpringBoot.mapper.UserMapper;
import com.qcby.SpringBoot.pojo.Product;
import com.qcby.SpringBoot.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.List;@SpringBootTest
public class Test2 {@Autowiredprivate UserMapper userMapper;@Autowiredprivate ProductMapper productMapper;@Testpublic void testSelectPageVo(){//设置分页参数Page<User> page = new Page<>(1, 5);userMapper.selectPageVo(page, 20);//获取分页数据List<User> list = page.getRecords();list.forEach(System.out::println);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());}
}
相关文章:
MyBatisPlus(SpringBoot版)的分页插件
目录 一、前置工作: 1.整体项目目录结构 2.创建普通javamaven项目。 3.导入依赖,改造成springboot项目 4.配置启动类 5.创建service接口及其实现类 6.创建接口Mapper 7.配置数据源 8.创建数据库表 二、使用MP(mybatisplus)的分页插件 二、使…...
【小沐学QT】QT学习之信号槽使用
文章目录 1、简介2、代码实现2.1 界面菜单“转到槽”方法2.2 界面信号槽编辑器方法2.3 QT4.0的绑定方法2.4 QT5.0之后的绑定方法2.5 C11的方法2.6 lamda表达式方法2.7 QSignalMapper方法 结语 1、简介 在GUI编程中,当我们更改一个小部件时,我们通常希望…...
SpringMVC总结
SpringMVC SpringMVC是隶属于Spring框架的一部分,主要是用来进行Web开发,是对Servlet进行了封装。 对于SpringMVC我们主要学习如下内容: SpringMVC简介 请求与响应 REST风格 SSM整合(注解版) 拦截器 SpringMVC是处理Web层/表现层的框架ÿ…...
JS一些重要函数
防抖函数 避免短时间内的函数多次调用影响性能 function debounce(func , wait){let timer;return (...args) > {clearTimeout(timer);timer setTimeout(() > {return func(args)} , wait)} } 函数柯里化 将多参函数以单参的形式传递 function curry(fn){return func…...
基于视觉识别的自动采摘机器人设计与实现
一、前言 1.1 项目介绍 【1】项目功能介绍 随着科技的进步和农业现代化的发展,农业生产效率与质量的提升成为重要的研究对象。其中,果蔬采摘环节在很大程度上影响着整个产业链的效益。传统的手工采摘方式不仅劳动强度大、效率低下,而且在劳…...
算法D32 | 贪心算法2 | 122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II
122.买卖股票的最佳时机II 本题解法很巧妙,大家可以看题思考一下,在看题解。 代码随想录P 只收集每天的正利润,利润可以每天分解。 Python: class Solution:def maxProfit(self, prices: List[int]) -> int:if len(prices)<2: retur…...
【iOS ARKit】协作 Session 实例
协作 Session 使用注意事项 协作 Session 是在 ARWorldMap 基础上发展起来的技术,ARWorldMap 包含了一系列的地标、ARAnchor 及在观察这些地标和 ARAnchor 时摄像机的视场(View)。如果用户在某一个位置新创建了一个 ARAnchor,这时…...
云原生精品资料合集(附下载)
云计算是产业数字化转型的关键基础设施,以基础设施资源为中心的云搬迁时代接近尾声,以应用价值为中心的云原生时代已经到,所以IT人员学习云原生正当时!最近跟各位大神征集了云原生的教程,行业报告和最佳实践,总有一款适…...
JVM 第一部分 JVM两种解释器 类加载过程和类加载器
JVM是跨平台跨语言的虚拟机,不直接接触硬件,位于操作系统的上一层 跟字节码文件直接关联,和语言没有关系 一次编译成字节码文件,多次执行 虚拟机可以分成三部分:类加载器,运行时数据区,执行引…...
用Java语言创建的Spring Boot项目中,如何传递数组呢??
问题: 用Java语言创建的Spring Boot项目中,如何传递数组呢?? 在这个思路中,其实,Java作为一个后端开发的语言,没必要着重于如何传入,我们主要做的便是对传入的数组数据进行处理即可…...
[笔记] 使用 Java Swing 实现一个简单的窗口
Java Swing 是一个用于构建图形用户界面(GUI)的Java库,它提供了丰富的组件和工具,用于创建交互式的桌面应用程序。Swing 是 Java Foundation Classes(JFC)的一部分,它是 Java 平台的一种标准用户…...
2024.03.03蓝桥云课笔记——排序
sort简介 #include<algorithm> 使用的是快速排序 时间复杂度为O(nlogn) sort使用(默认是从小到大) 1.sort(起始地址,结束地址的下一位,*比较函数); #include<iostream> #include<algorithm> using namesp…...
Vue3和ElementPlus封装table组件
最近学习vue3.2并自己在写一个项目,然后发现好几个页面都是列表页,重复写table和column也是觉得累,学习的项目列表页不算多,要是公司项目就不一样了,所以就想着自己封装一个table组件,免去大量重复工作和co…...
第一篇:参考资料地址
javaGuide JavaGuide(Java学习&面试指南) | JavaGuide 清华学生总结的 小林coding labuladong labuladong 的算法笔记 | labuladong 的算法笔记 【华仔说技术】kafka的系列文章 https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg3MTcxMDgxNA…...
wordpress 开源主题
海外就医wordpress主题 出国看病、海外就医是越来越多中产家庭的选择,此wordpress主题适合做相关业务的公司官网。 https://www.jianzhanpress.com/?p5220 防护wordpress外贸主题 个人防护器具wordpress外贸主题,适合做劳动保护的外贸公司使用。 ht…...
【Linux网络命令系列】ping curl telnet三剑客
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
于月仙主动与赵本山握手表示欢迎,赵:怎么着要跟我第二次牵手啊?
于月仙主动与赵本山握手表示欢迎,赵:怎么着要跟我第二次牵手啊? --小品《乡村爱情》(中1)的台词 表演者:赵本山 于月仙 王小利 唐鉴军等 (接上) 咱们呢就给新人揭盖头 好 好长贵…...
Unity UGUI之Slider基本了解
在Unity中,Slider(滑动条)是一种常用的用户界面控件之一,允许用户通过拖动滑块来选择一个数值。常常应用于调节数值(如调节音量、亮度、游戏难度等)、设置选项等。 以下是Slider的基本信息和用法: 1、创建…...
【Linux】进程间通信之共享内存
文章目录 引入共享内存的原理共享内存的相关接口shmget()shmat()shmdt()shmctl() 共享内存的简单使用共享内存的特点 引入 进程间通信,顾名思义就是一个进程和另一个进程之间进行对话,以此完成数据传输、资源共享、通知事件或进程控制等。 众所周知&am…...
文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《基于条件风险价值的虚拟电厂参与能量及备用市场的双层随机优化》
本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 这篇文章的标题涉及到以下几个关键点…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用
一、方案背景 在现代生产与生活场景中,如工厂高危作业区、医院手术室、公共场景等,人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式,存在效率低、覆盖面不足、判断主观性强等问题,难以满足对人员打手机行为精…...
论文阅读:LLM4Drive: A Survey of Large Language Models for Autonomous Driving
地址:LLM4Drive: A Survey of Large Language Models for Autonomous Driving 摘要翻译 自动驾驶技术作为推动交通和城市出行变革的催化剂,正从基于规则的系统向数据驱动策略转变。传统的模块化系统受限于级联模块间的累积误差和缺乏灵活性的预设规则。…...
Mac flutter环境搭建
一、下载flutter sdk 制作 Android 应用 | Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 1、查看mac电脑处理器选择sdk 2、解压 unzip ~/Downloads/flutter_macos_arm64_3.32.2-stable.zip \ -d ~/development/ 3、添加环境变量 命令行打开配置环境变量文件 ope…...
【深尚想】TPS54618CQRTERQ1汽车级同步降压转换器电源芯片全面解析
1. 元器件定义与技术特点 TPS54618CQRTERQ1 是德州仪器(TI)推出的一款 汽车级同步降压转换器(DC-DC开关稳压器),属于高性能电源管理芯片。核心特性包括: 输入电压范围:2.95V–6V,输…...
拟合问题处理
在机器学习中,核心任务通常围绕模型训练和性能提升展开,但你提到的 “优化训练数据解决过拟合” 和 “提升泛化性能解决欠拟合” 需要结合更准确的概念进行梳理。以下是对机器学习核心任务的系统复习和修正: 一、机器学习的核心任务框架 机…...
LUA+Reids实现库存秒杀预扣减 记录流水 以及自己的思考
目录 lua脚本 记录流水 记录流水的作用 流水什么时候删除 我们在做库存扣减的时候,显示基于Lua脚本和Redis实现的预扣减 这样可以在秒杀扣减的时候保证操作的原子性和高效性 lua脚本 // ... 已有代码 ...Overridepublic InventoryResponse decrease(Inventor…...
