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

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

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

相关文章

GWO-RF|灰狼算法优化随机森林 回归预测|多变量回归预测

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、算法介绍&#xff1a; 灰狼优化算法&#xff1a; 随机森林&#xff1a; 四、完整程序下载&#xff1a; 一、程序及算法内容介绍&#xff1a; …

疾控中心污水采样器自动采样——解放双手更轻松

疾控中心使用的污水采样器如今已经实现了自动化采样&#xff0c;这无疑给工作人员带来了极大的便利。这种设备能够完成污水取样、储存等环节&#xff0c;不再需要人工干预。这意味着工作人员可以解放双手&#xff0c;不再需要进行繁重的取样工作。 这种自动化的采样方式不仅减轻…

python转换json

import json import os from enum import Enumclass LaneDirectionType(int, Enum):LaneDirectionType_Unknown -1 # 类型未知OneWay 1 # 单向TwoWay 2 # 双向# 颜色类型 class ColorCombo(int, Enum):NOUSE 0 # 默认值UNKNOWN 1000 # 未定义WHITE 1 # 白色(默认值…

ffmpeg maxrate 导致转码输出的内容包含随机性

https://trac.ffmpeg.org/wiki/Limiting%20the%20output%20bitrate 问题 领导提出了一个问题&#xff0c;为什么转码后的视频大小字节数据都不一样&#xff0c;这问到我了&#xff0c;一时语塞。查一下吧&#xff0c;没有什么资料支撑。主动试一下。 尝试 首先尝试一下直接…

C#,动态规划的集合划分问题(DP Partition problem)算法与源代码

1 动态规划问题中的划分问题 动态规划问题中的划分问题是确定一个给定的集是否可以划分为两个子集&#xff0c;使得两个子集中的元素之和相同。 动态规划&#xff08;Dynamic Programming&#xff0c;DP&#xff09;是运筹学的一个分支&#xff0c;是求解决策过程最优化的过程…

Python基础一

Python是一门简单的编程语言&#xff0c;适用于人工智能、web应用、爬虫程序、大数据等方面 一、Python语言特点 Python 是一种功能强大且流行的编程语言&#xff0c;具有许多特点&#xff0c;其中一些包括&#xff1a; 1. **易学易用** Python 的语法简洁清晰&#xff0c;类…

【go语言开发】gorm库连接和操作mysql,实现一个简单的用户注册和登录

本文主要介绍使用gorm库连接和操作mysql&#xff0c;首先安装gorm和mysql依赖库&#xff1b;然后初始化mysql&#xff0c;配置连接池等基本信息&#xff1b;然后建表、完成dao、controller开发&#xff1b;最后在swagger中测试 文章目录 前言安装依赖库数据库初始化账号注册和登…

springBoot整合Redis(三、整合Spring Cache)

缓存的框架太多了&#xff0c;各有各的优势&#xff0c;比如Redis、Memcached、Guava、Caffeine等等。 如果我们的程序想要使用缓存&#xff0c;就要与这些框架耦合。聪明的架构师已经在利用接口来降低耦合了&#xff0c;利用面向对象的抽象和多态的特性&#xff0c;做到业务代…

上市公司财务报表精讲系列一:黄山旅游

上市公司财务报表精讲系列一&#xff1a;黄山旅游 一、主营业务分行业、分产品、分地区情况二、董事会报告三、净利润现金流四、净资产收益率五、权益乘数和总资产周转率六、负债结构图七、行业分析八、案例总结九、2023年度业绩 一、主营业务分行业、分产品、分地区情况 二、董…

为国产信创服务器提供LDAP统一身份认证方案

金融信创作为 8 大行业信创之首&#xff0c;早已成为其他行业信创建设的参考。金融行业有着极为复杂的业务场景&#xff0c;对系统有着极高的稳定可靠需求&#xff0c;因此&#xff0c;在寻找微软 AD 国产化替代方案时&#xff0c;常会涉及到更深层次的场景。例如&#xff0c;最…

unity学习(45)——选择角色菜单——客户端处理服务器的数据

1.已知客户端ReceiveCallBack中已经收到来自服务器返回的数据包。 2.问题是客户端MessageManager中的Update并没有拆解该数据包 &#xff0c;因该是因为脚本没有挂载。 挂在SelectMenu场景中的Camera上即可。 挂载后成功达到目地 其中Update中的List是一个起到全局效果的static…

CVPR 2024 | Modular Blind Video Quality Assessment:模块化无参视频质量评估

无参视频质量评估 (Blind Video Quality Assessment&#xff0c;BVQA) 在评估和改善各种视频平台并服务用户的观看体验方面发挥着关键作用。当前基于深度学习的模型主要以下采样/局部块采样的形式分析视频内容&#xff0c;而忽视了实际空域分辨率和时域帧率对视频质量的影响&am…

学习 考证 帆软 FCP-FineBI V6.0 心得

学习背景&#xff1a; 自2024年1月起&#xff0c;大部分时间就在家里度过了&#xff0c;想着还是需要充实一下自己&#xff0c;我是一个充满热情的个体。由于之前公司也和帆软结缘&#xff0c;无论是 Fine-Report 和 Fine-BI 都有接触3年之久&#xff0c;但是主要做为管理者并…

MyBatis复杂映射开发之多对多查询

多对多查询的模型 用户表和角色表的关系为&#xff0c;一个用户有多个角色&#xff0c;一个角色被多个用户使用。 多对多查询的需求&#xff1a;查询所有用户的同时查询出该用户对应的所有角色。 startuml !theme plain top to bottom direction skinparam linetype ortho cl…

阿里云服务器使用教程_搭建网站教程_2024建站教程

使用阿里云服务器快速搭建网站教程&#xff0c;先为云服务器安装宝塔面板&#xff0c;然后在宝塔面板上新建站点&#xff0c;阿里云服务器网aliyunfuwuqi.com以搭建WordPress网站博客为例&#xff0c;来详细说下从阿里云服务器CPU内存配置选择、Web环境、域名解析到网站上线全流…

XUbuntu22.04之显示实时网速(二百一十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

智能网联各地市政策盘点

本文旨在对2023年及2024年初各地市所出台的智能网联相关政策进行全面的梳理与总结。通过与此前发布的关于2023年和2024年初各部委、省、直辖市智能网联相关政策的盘点相互呼应&#xff0c;力求为读者呈现一个全面、系统的政策概览。 文 | 吴冬升 全文6000字&#xff0c;预计阅读…

html--3D爱心

文章目录 代码效果 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>爱心</title><style type"text/css">*{margin: 0px;border: 0px;}body{overflow: hidden;background-…

Docker-部署若依项目

文章目录 后端一、搭建局域网二、redis安装测试 三、MySQL安装四、后端项目放入位置及使用Dockerfile自定义镜像后端项目放入位置 前端配置检查各个端口是否启动nginx部署 首先得先把内部的文件给删除清空 docker images–查看有哪些文件 docker rmi -f ID–删除ID 后端 一、…

腾讯QQ推出AI聊天搭子;零一万物01AI宣布开源Yi-9B模型

&#x1f989; AI新闻 &#x1f680; 腾讯QQ推出AI聊天搭子&#xff0c;进军AI对话领域 摘要&#xff1a;腾讯QQ合作筑梦岛和混元助手&#xff0c;推出了AI对话功能“AI聊天搭子”&#xff0c;提供多种虚拟角色与用户实时互动&#xff0c;目前已开启测试。此外&#xff0c;抖…