首页 > 其他分享 >springboot+vue项目

springboot+vue项目

时间:2024-05-09 18:56:23浏览次数:21  
标签:插件 vue 分页 项目 查询 Plus MyBatis page springboot

1 MyBatis Plus 的分页插件是怎么生效的?体现在哪里?PaginationInnerInterceptor 是通过拦截数据库操作来实现分页功能的。

 

MyBatis Plus 的分页插件 PaginationInnerInterceptor 是通过拦截数据库操作来实现分页功能的。它的工作原理如下:

  1. 配置分页插件:在你的 Spring Boot 应用中,你需要配置 MybatisPlusInterceptor 并向其添加 PaginationInnerInterceptor。这是在你的配置类 MybatisPlusConfig 中完成的,如下所示:

    @Configuration
    public class MybatisPlusConfig {
       @Bean
       public MybatisPlusInterceptor mybatisPlusInterceptor() {
           MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
           interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
           return interceptor;
      }
    }

    这段代码的作用是创建一个 MybatisPlusInterceptor 实例,并向其添加一个配置好的 PaginationInnerInterceptor 实例,这样就启用了分页功能。

  2. 使用分页功能:当你需要执行分页查询时,你会创建一个 Page 对象并传递给 MyBatis Plus 的 page 方法。例如,在你的控制器中,当调用 furnService.page(...) 方法时,你实际上是在请求 MyBatis Plus 为你执行分页查询:

    @GetMapping("/furnByPage")
    public Result listFurnsByPage(@RequestParam(defaultValue = "1") Integer pageNum,
                                 @RequestParam(defaultValue = "5") Integer pageSize) {
       Page<Furn> page = furnService.page(new Page<>(pageNum, pageSize));
       return Result.success(page);
    }

    在这个例子中,new Page<>(pageNum, pageSize) 创建了一个分页请求,pageNum 是当前页号,pageSize 是每页显示的记录数。furnService.page(...) 方法内部会根据这些参数,使用分页插件自动修改 SQL 语句,以实现分页查询。

  3. 分页插件的作用PaginationInnerInterceptor 会自动修改你的 SQL 查询,添加 LIMIT 子句(对于 MySQL 数据库),以实现分页功能。它还会执行另一个查询以获取总记录数(总行数),这是为了支持分页控件显示总页数和总记录数。

  4. 体现:分页插件的作用主要体现在:

    • 自动改写原始 SQL 语句,添加用于限制结果集大小的语句,实现物理分页。

    • 自动查询总记录数,并将结果封装到 Page 对象中,方便前端分页显示和操作。

    • 开发者无需手动编写分页逻辑和计算总页数,极大提高开发效率。

总之,分页插件的生效是在你配置了相应的拦截器并在服务层调用分页方法时自动实现的。这个过程对开发者来说是透明的,你只需要按照正常方式编写你的查询条件,剩下的分页处理都由 MyBatis Plus 和分页插件完成。

 

2 也就是说如果用到MybatisPlus的分页操作,形如furnService.page(...)的,就必须注入一个分页插件/拦截器对吗?

是的,你的理解是正确的。如果你想使用 MyBatis Plus 的分页功能,例如通过 furnService.page(...) 这样的方法实现自动分页,那么你必须在你的 Spring Boot 应用中配置并注入 MyBatis Plus 的分页插件,也就是 PaginationInnerInterceptor。这是因为 MyBatis Plus 的分页功能是通过这个分页插件来实现的。

分页插件工作的方式是拦截所有的查询操作,然后检查是否有分页参数(Page 对象),如果有,则自动修改 SQL 语句以实现分页查询。同时,分页插件还会自动执行一个额外的查询以获取总记录数,从而支持前端的分页显示。

要启用分页功能,你需要按照如下步骤在你的配置类中添加分页插件:

@Configuration
public class MybatisPlusConfig {

   @Bean
   public MybatisPlusInterceptor mybatisPlusInterceptor() {
       MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
       interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // 这里的 DbType.MYSQL 根据实际数据库类型决定
       return interceptor;
  }
}

这段代码将确保在执行数据库操作时,分页插件能够拦截到这些操作,并根据需要修改 SQL 语句以实现分页。因此,确实需要注入这个分页插件/拦截器,以便你的应用能够使用 MyBatis Plus 提供的分页功能。

3 page 方法是通过 MyBatis Plus 实现自动分页的核心方法

在 MyBatis Plus 中进行分页操作的那部分代码是这一行:

public class AttrgroupServiceImpl extends ServiceImpl<AttrgroupDao, AttrgroupEntity> implements AttrgroupService {

@Override
   public PageUtils queryPage(Map<String, Object> params, Long categoryId) {

   IPage<AttrgroupEntity> page = this.page(
       new Query<AttrgroupEntity>().getPage(params),
       wrapper
  );
  ...    
       

在这段代码中:

  1. this.page(...) 方法是 MyBatis Plus 提供的,用于执行分页查询。this 在这里指的是当前的服务类 AttrgroupServiceImpl 的实例,它继承自 ServiceImpl<AttrgroupDao, AttrgroupEntity>,而 ServiceImpl 类提供了 page 方法,用于执行分页查询。因此,这里的 this 实际上就是指当前的服务实例,它继承了 ServiceImpl 从而具有执行分页查询的能力。

  2. new Query<AttrgroupEntity>().getPage(params) 是创建一个分页查询条件,其中 Query 是一个工具类,它根据传入的参数 params(这些参数一般包括分页的信息,如当前页和每页大小等),构造出一个 IPage<AttrgroupEntity> 类型的对象,这个对象表示分页请求的信息。

  3. wrapper 是一个 QueryWrapper<AttrgroupEntity> 类的实例,它定义了查询的条件。如果 wrapper 没有指定任何条件,那么 page 方法将会返回所有记录的分页结果。

因此,this.page(...) 这行代码是执行分页操作的核心,它结合了分页信息和查询条件,进行数据库查询,并返回查询结果。这里的 page 方法是通过 MyBatis Plus 实现自动分页的核心方法,通过它可以非常方便地实现复杂的分页逻辑。

 

4

标签:插件,vue,分页,项目,查询,Plus,MyBatis,page,springboot
From: https://www.cnblogs.com/kapai/p/18182918

相关文章

  • 零知识证明: Tornado Cash 项目学习
    前言最近在了解零知识证明方面的内容,这方面的内容确实不好入门也不好掌握,在了解了一些基础的概念以后,决定选择一个应用了零知识证明的项目来进行进一步的学习。最终选择了TornadoCash这个项目,因为它著名且精致,适合入门的同学进行学习。学习TornadoCash项目,涉及以下方面:......
  • 高并发秒杀项目随手笔记
    1数据库基字符集为什么选择utf8mb4? 2在MyBatis中,JavaBean属性名和数据库字段名的映射非常关键,正确设置这一映射是保证数据正确封装到JavaBean中的前提。以下是MyBatis映射机制的详细解释:1.默认映射行为如果在MyBatis的<resultMap>中没有明确指定映射关系,MyBa......
  • SpringBoot随手笔记
    SpringBoot随手笔记0关于火狐浏览器什么时候会发出http请求的说明在抓包的情况下(按下F12后的模式),不管是刷新页面还是在浏览器地址栏回车,该页面中的图片都会发出http请求;但如果不是抓包的模式下,如果访问的页面和上一次访问的页面相同(地址栏的地址没有更改),不管是刷新页面还......
  • springboot seata 全局捕获异常失效
    问题:Springboot使用@ControllerAdvice或@RestControllerAdvice全局捕获异常时,捕获不到自己抛出的相应异常首先看一下全局异常组件有么有被扫描到如何查看,很简单只需要写一段类加载打印代码,如下 如果启动时,打印了你写的字符串就说明时烧苗到了 这就说明是其他的问题了,那就......
  • Springboot项目的jar包的运行方式以及使用yum安装java后忘记了位置
    SpringBoot项目打包后的jar的部署方式这里我写了五种部署方式1.直接启动java-jarxxx.jar这种方式就只适合自己在测试时用一下,关闭会话就能停止运行属实是方便。2.后台启动java-jarxxx.jar&在后台静默启动,同样关闭会话也会停止,优点是和上面一样,日志是打印在窗口的3......
  • docker打包前端项目/flask项目
    1.docker安装我安装的是dockerdesktop安装完成后$docker-v$Dockerversion26.0.0,build2ae903e同时也可以打开图形界面看2.前端打包配置Dockerfile放在前端项目根目录配置nginx.conf放在前端项目根目录---Dockerfile#设置Node.js版本FROMnode:20.12.2#设置容器工......
  • Springboot - [06] yaml语法讲解
    Yaml是一种标记语言,Yaml也不是一种标记语言。 一、yaml写法示例application.yaml#普通的key-valuename:harleyserver.port:8081#对象student:name:harleyage:25#对象的行内写法student:{name:harley,age:25}#数组pets:-cat-......
  • SpringBoot - [04] 自动装配原理
    题记部分   SpringBoot的自动装配(Auto-Configuration)原理是其简化Spring应用开发的关键特性之一,它能自动配置Spring框架及第三方库,极大地减少了手动配置的工作量。以下是SpringBoot自动装配的核心原理和步骤:(1)条件化配置(ConditionalConfiguration):  SpringBoot利用Spr......
  • Springboot - [05] 彩蛋~
    题记部分  彩蛋一:如何更换Springboot启动时的logo(1)访问https://www.bootschool.net/ascii-art/search,搜索到佛祖的ASCII艺术字(图)集(2)将内容拷贝到src/main/resources下的文件中,文件名称为banner.txt(3)启动SpringBoot的应用  彩蛋二:  彩蛋三:   —要......
  • SpringBoot系列---【解决springboot应用突然无法启动了,日志中也没有错误日志】
    解决springboot应用突然无法启动了,日志中也没有错误日志1.问题描述五一过完了,来了之后突然发现一个微服务起不来了,本地启动没问题,但是上测试环境就是无法启动,但是查看日志,日志中也没有报错信息。怀疑是网络策略的问题,curl去试了一下数据库,as,redis,zk等等中间件,发现都通,最后又试了......