当前位置: 首页 > article >正文

SpringBoot + MyBatisPlus分页查询

文章目录

    • 1.思路分析
    • 2.分页查询后端实现
        • 1.com/sun/furn/config/MybatisConfig.java 注入MyBatisPlus分页拦截器
        • 2.com/sun/furn/controller/FurnController.java 添加方法
        • 3.postman测试
    • 3.分页查询前端实现
        • 1.src/views/HomeView.vue 引入分页导航条组件
        • 2.src/views/HomeView.vue 初始化数据池
        • 3.查看效果
        • 4.src/views/HomeView.vue 方法池新增三个方法
        • 5.前端分页查询小结
            • Vue总结为一句话:**方法池三端获取数据,保证Model对View的实时渲染!**
        • 6.结果展示
    • 4.切换数据源为druid
        • 1.pom.xml 引入druid依赖
        • 2.com/sun/furn/config/DruidDataSourceConfig.java 配置文件注入druid数据源
        • 3.启动测试
    • 5.带条件查询分页显示后端实现
        • 1.com/sun/furn/controller/FurnController.java 添加方法
        • 2.postman测试
    • 6.带条件查询分页显示前端实现
        • 1.src/views/HomeView.vue 基本准备
          • 1.前端界面
          • 2.数据池
        • 2.src/views/HomeView.vue 直接修改方法区的list方法
        • 3.结果展示

1.思路分析

image-20240319140604182

2.分页查询后端实现

1.com/sun/furn/config/MybatisConfig.java 注入MyBatisPlus分页拦截器
package com.sun.furn.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;

/**
 * Description: MyBatis分页查询配置类
 *
 * @Author sun
 * @Create 2024/3/19 14:13
 * @Version 1.0
 */
@Configuration
public class MybatisConfig {

    /**
     * 注入一个MyBatisPlus拦截器,在其中添加一个内部拦截器
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        //这里分页需要指定数据库类型DbType
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return mybatisPlusInterceptor;
    }
}
2.com/sun/furn/controller/FurnController.java 添加方法
    /**
     *
     * @param pageNum 第几页 默认1
     * @param pageSize 页的大小 默认5
     * @return
     */
    @GetMapping("/furnsByPage")
    public Result listFurnsByPage(@RequestParam(defaultValue = "1") Integer pageNum,
                                  @RequestParam(defaultValue = "5") Integer pageSize) {
        //通过page方法,返回分页信息
        Page<Furn> page = furnService.page(new Page<>(pageNum, pageSize));
        return Result.success(page);
    }
3.postman测试

image-20240319143404796

3.分页查询前端实现

1.src/views/HomeView.vue 引入分页导航条组件
    <!--    引入分页导航条组件-->
    <div style="margin: 10px 0">
      <el-pagination
          @size-change="handlePageSizeChange" @current-change="handleCurrentChange"
          :current-page="currentPage"
          :page-sizes="[5,10]"
          :page-size="pageSize"
          layout="total, sizes, prev, pager, next, jumper"
          :total="total">
      </el-pagination>
    </div>
2.src/views/HomeView.vue 初始化数据池

image-20240319144709473

3.查看效果

image-20240319144729078

4.src/views/HomeView.vue 方法池新增三个方法
    // 分页显示家居信息
    list() {
      request.get("/api/furnsByPage", {
        params: {
          // 请求参数
          pageNum: this.currentPage,
          pageSize: this.pageSize
        }
      }).then(
          res => {
            this.tableData = res.data.records
            this.total = res.data.total
          }
      )
    },
    //监控pagesize的改变
    handlePageSizeChange(pageSize) {
      //更新数据池中的信息,使得view更新
      this.pageSize = pageSize
      //向后端发送分页请求,更新数据
      this.list()
    },
    //监控currentPage的改变
    handleCurrentChange(currentPage) {
      this.currentPage = currentPage
      //向后端发送分页请求,更新数据
      this.list()
    }
5.前端分页查询小结
Vue总结为一句话:方法池三端获取数据,保证Model对View的实时渲染!
  • 数据池就是保证对前端页面的实时渲染
  • 方法池就是通过从前端页面、数据池、后端DB 获取信息从而保证数据池对前端页面的实时渲染

image-20240319153233991

6.结果展示

image-20240319153932395

4.切换数据源为druid

1.pom.xml 引入druid依赖
    <!-- 引入 druid 依赖 -->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.1.17</version>
    </dependency>
2.com/sun/furn/config/DruidDataSourceConfig.java 配置文件注入druid数据源
package com.sun.furn.config;

import com.alibaba.druid.pool.DruidDataSource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * Description: 注入德鲁伊数据源的配置类
 *
 * @Author sun
 * @Create 2024/3/19 15:40
 * @Version 1.0
 */
@Configuration
@Slf4j
public class DruidDataSourceConfig {
    @Bean
    @ConfigurationProperties("spring.datasource")
    public DruidDataSource druidDataSource() {
        DruidDataSource druidDataSource = new DruidDataSource();
        //日志输出,查看是否注入
        log.info("数据源={}" + druidDataSource);
        return druidDataSource;
    }
}

3.启动测试

image-20240319155344637

5.带条件查询分页显示后端实现

1.com/sun/furn/controller/FurnController.java 添加方法
    /**
     * 根据条件(name)进行查询
     *
     * @param pageNum  第几页 默认1
     * @param pageSize 页的大小 默认5
     * @param search   查询条件 默认为空即不带条件
     * @return
     */
    @GetMapping("/furnsByCondition")
    public Result listFurnsByConditionPage(@RequestParam(defaultValue = "1") Integer pageNum,
                                           @RequestParam(defaultValue = "5") Integer pageSize,
                                           @RequestParam(defaultValue = "") String search) {
        // 获取QueryWrapper对象
        QueryWrapper<Furn> query = Wrappers.query();
        if (StringUtils.hasText(search)) {
            //查询条件是name like。。。
            query.like("name", "%" + search + "%");
        }

        //返回page对象
        Page<Furn> page = furnService.page(new Page<>(pageNum, pageSize), query);
        return Result.success(page);
    }
2.postman测试

image-20240319162851610

6.带条件查询分页显示前端实现

1.src/views/HomeView.vue 基本准备
1.前端界面

image-20240319163811086

2.数据池

image-20240319163921012

2.src/views/HomeView.vue 直接修改方法区的list方法
    // 分页显示家居信息(条件查询)
    list() {
      request.get("/api/furnsByCondition", {
        params: {
          // 请求参数
          pageNum: this.currentPage,
          pageSize: this.pageSize,
          search: this.search //这里添加的根据名字进行查询的条件,如果没有在搜索框里输入,则是空,也就是不带条件进行查询
        }
      }).then(
          res => {
            this.tableData = res.data.records
            this.total = res.data.total
          }
      )
    }
3.结果展示

image-20240319164013455


http://www.kler.cn/a/274398.html

相关文章:

  • “宏“知识详解
  • LeetCode 热题 100_K 个一组翻转链表(31_25_困难_C++)(四指针法)
  • 【Leecode】Leecode刷题之路第87天之扰乱字符串
  • 周末总结(2024/12/21)
  • 基于层次化设计方法,设计一个16位二进制全加器
  • 武汉市电子信息与通信工程职称公示了
  • 外包干了6天,技术明显进步。。。
  • 【二分】第十三届蓝桥杯省赛C++ A组《青蛙过河》(C++)
  • 策略模式在项目中实际应用
  • springboot企业级抽奖项目-整体展示
  • 腾讯云服务器多少钱一个月?5元1个月,这价格没谁了
  • linux单机部署hadoop
  • RK3588_Qt交叉编译环境搭建
  • jenkins 连接harbor 推送镜像
  • 简单对已有云服务器进行linux环境搭建以及共享服务器
  • Nginx安装和平滑升级
  • 流畅的Python(二十一)-类元编程
  • 框架篇常见面试题
  • mysql重构
  • Livox激光雷达 mid360 跑 fastlio2 - 流程记录
  • Day23 二叉树09
  • 晶圆制造过程中常用载具的类型
  • AI推介-多模态视觉语言模型VLMs论文速览(arXiv方向):2024.03.10-2024.03.15
  • QT自定义带参数信号与槽函数
  • PHP+MySQL开发组合:多端多商户DIY商城源码系统 带完整的搭建教程以及安装代码包
  • im-system学习