分页功能的实现,结合MyBatis-Plus&Vue

本文详细介绍了如何在SpringBoot项目中通过MyBatis-Plus实现服务器端的员工信息分页,并结合Vue.js和ElementUI构建前端分页组件,以及两者间通过Axios处理异步请求的过程。
摘要由CSDN通过智能技术生成

分页功能的实现

下面将给出一个示例,这个示例演示了前后端分页的实现方式,集成了MyBatis-Plus以在服务器端进行员工信息的分页,并利用Vue.js结合Element UI分页组件在客户端进行分页。前端和后端之间的通信通过Axios处理异步请求。

  • MybatisPlusConfig配置类:

    /**
     * 配置MP的分页插件
     */
    @Configuration
    public class MybatisPlusConfig {
            @Bean
            public MybatisPlusInterceptor mybatisPlusInterceptor() {
                MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
                mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
                return mybatisPlusInterceptor;
            }
    }
    

    该配置类配置了MyBatis Plus的分页插件,使用PaginationInnerInterceptor作为分页的内部拦截器。

    该函数的功能和实现过程:

    • @Configuration: 这个注解表明这是一个配置类,Spring Boot 在应用启动时会加载它,用于配置一些相关的 bean。

    • @Bean: 这个注解用于声明一个 bean,该方法返回的对象将被 Spring 容器管理。

    • public MybatisPlusInterceptor mybatisPlusInterceptor(): 这个方法,返回一个 MybatisPlusInterceptor 对象。该对象是 MyBatis-Plus 提供的分页插件的核心配置类。

    • MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();: 创建一个 MybatisPlusInterceptor 对象。

    • mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());: 向 MybatisPlusInterceptor 对象中添加一个内部拦截器,这里使用的是 PaginationInnerInterceptor。这个内部拦截器是 MyBatis-Plus 分页插件的具体实现,它会拦截 SQL 查询,并在查询中添加分页的相关逻辑。

    • return mybatisPlusInterceptor;: 将配置好的 MybatisPlusInterceptor 对象返回,以便被 Spring 容器管理。

  • 前端Vue组件:

    <el-pagination
            class="pageList"
            :page-sizes="[10, 20, 30, 40]"
            :page-size="pageSize"
            layout="total, sizes, prev, pager, next, jumper"
            :total="counts"
            :current-page.sync="page"
            @size-change="handleSizeChange"
            @current-change="handleCurrentChange"
          ></el-pagination>
    

    前端使用Element UI的el-pagination组件进行分页展示,通过page-sizecountspage等属性来控制分页状态,同时监听size-changecurrent-change事件来处理分页大小和当前页码的变化。

  • 前端事件处理方法:

     handleSizeChange (val) {
                this.pageSize = val
                this.init()
              },
    handleCurrentChange (val) {
                this.page = val
                this.init()
              }
    

    前端定义了处理分页大小变化和当前页码变化的事件方法,分别调用init方法进行数据重新加载。

  • 前端数据初始化方法:

    async init () {
                const params = {
                  page: this.page,
                  pageSize: this.pageSize,
                  name: this.input ? this.input : undefined
                }
                await getMemberList(params).then(res => {
                  if (String(res.code) === '1') {
                    this.tableData = res.data.records || []
                    this.counts = res.data.total
                  }
                }).catch(err => {
                  this.$message.error('请求出错了:' + err)
                })
              }
    

    init方法负责调用后端接口获取分页数据,并更新前端展示的数据和分页信息。

    这个函数的功能是通过调用 getMemberList 函数获取成员列表的数据,并根据响应结果更新组件的状态,包括 this.tableDatathis.counts。如果请求出错,会显示错误消息。这样的初始化函数通常用于在组件加载时获取初始数据。

  • 前端异步请求函数

    function getMemberList (params) {
      return $axios({
        url: '/employee/page',
        method: 'get',
        params
      })
    }
    

    用于向后端请求员工信息的分页数据。该函数使用axios库发送HTTP GET请求到指定的后端接口/employee/page,并携带了前端传递的参数params,包括page(当前页码)、pageSize(每页数据量)和name(可能的员工姓名过滤条件)。

  • 后端Spring Boot Controller方法:

    /**
         * 员工信息分页查询
         * @param page
         * @param pageSize
         * @param name
         * @return
         */
        @GetMapping("/page")
        public R<Page>  page(int page, int pageSize, String name){     //Page是MP封装好的类
            log.info("page = {}, pageSize = {}, name = {}", page, pageSize, name);
    
            //构造分页构造器
            Page pageInfo = new Page<>(page, pageSize);
    
            //构造条件构造器
            LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper();
            //添加过滤条件
            queryWrapper.like(StringUtils.isNotEmpty(name), Employee::getName, name);
            //添加排序条件
            queryWrapper.orderByDesc(Employee::getUpdateTime);
    
            //执行查询
            employeeService.page(pageInfo, queryWrapper);
    
            return R.success(pageInfo);
        }
    

    后端Controller定义了一个分页查询接口,接收前端传递的分页参数和查询条件,构造MyBatis Plus的Page对象和LambdaQueryWrapper条件构造器,然后调用Service层的page方法执行查询,并将查询结果返回给前端。

    该函数的功能和实现过程:

    • @GetMapping("/page"): 这是一个处理 HTTP GET 请求的注解,映射到路径 “/page”。表示该方法用于处理获取分页数据的请求。

    • public R<Page> page(int page, int pageSize, String name): 方法声明,接受三个参数,分别是页码 page、每页大小 pageSize 和员工名字 name。返回类型是一个泛型 R,其中包装了一个 Page 对象。R 可能是一个自定义的响应类,用于封装接口返回结果。

    • Page pageInfo = new Page<>(page, pageSize): 创建一个 MyBatis-Plus 提供的 Page 对象,用于封装分页信息,包括页码和每页大小。

    • LambdaQueryWrapper<Employee> queryWrapper = new LambdaQueryWrapper();: 创建一个 MyBatis-Plus 提供的 LambdaQueryWrapper 对象,用于构造查询条件。

    • queryWrapper.like(StringUtils.isNotEmpty(name), Employee::getName, name): 添加一个条件,如果员工名字不为空,则添加一个模糊查询条件,根据名字过滤员工信息。

    • queryWrapper.orderByDesc(Employee::getUpdateTime): 添加排序条件,按照员工信息的更新时间降序排序。

    • employeeService.page(pageInfo, queryWrapper): 调用 employeeServicepage 方法执行分页查询,将查询结果封装到 pageInfo 对象中。

  • 23
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!针对 VueMyBatis-Plus 进行分页查询的话,可以按照以下步骤进行操作: 1. 在前端 Vue 项目中,首先需要安装 axios,可以使用以下命令进行安装: ```bash npm install axios --save ``` 2. 创建一个封装了分页查询逻辑的函数,例如 `fetchData`: ```javascript import axios from 'axios'; export function fetchData(pageNum, pageSize) { return axios.get('/api/data', { params: { pageNum, pageSize } }); } ``` 3. 在后端的 Java 项目中,使用 MyBatis-Plus 进行分页查询的话,可以参考以下步骤: - 首先,确保已经引入了 MyBatis-Plus 的依赖,可以在 Maven 或 Gradle 配置文件中添加如下依赖: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>{version}</version> </dependency> ``` - 在 MyBatis-Plus 的配置文件中,设置分页插件,例如 `MybatisPlusConfig`: ```java @Configuration @MapperScan("com.example.mapper") public class MybatisPlusConfig { @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); } } ``` - 在 Mapper 接口中定义分页查询方法,例如 `DataMapper`: ```java @Repository public interface DataMapper extends BaseMapper<Data> { IPage<Data> selectDataByPage(Page<Data> page, @Param("param") QueryParam param); } ``` - 在 Service 中调用 Mapper 的分页查询方法,例如 `DataService`: ```java @Service public class DataService { @Autowired private DataMapper dataMapper; public IPage<Data> getDataByPage(int pageNum, int pageSize, QueryParam param) { Page<Data> page = new Page<>(pageNum, pageSize); return dataMapper.selectDataByPage(page, param); } } ``` 以上是一个简单的 VueMyBatis-Plus 分页查询的示例,具体的实现方式可能因项目结构和需求而有所不同,请根据实际情况进行调整。希望对您有所帮助!如果还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值