解决springboot+vue+mybatis中,将后台数据分页显示在前台,并且根据页码自动跳转对应页码信息

简介: 该博客文章讲述了如何在Spring Boot + Vue + MyBatis的项目中实现后台数据的分页查询,并在前端进行显示和页码跳转,包括后端的分页查询实现、前端与后端的交互以及使用Element UI进行分页展示的方法。

文章目录

  • 先看效果
  • 1、要考虑的问题,对数据进行分页查询
  • 2、前端和后台的交互

先看效果

在这里插入图片描述
在这里插入图片描述

1、要考虑的问题,对数据进行分页查询

mapper文件这样写
从每次开始查询的位置,到每页展示的条数,

<!--    分页查询-->
    <select id="queryBookList" parameterType="Map" resultType="com.zheng.pojo.Books">
        select * from bookss limit  #{startIndex},#{pageSize}
    </select>

dao、service、serviceimpl略
看controller
关键在这边,传入的page和size是从前台改变页码到指定页

    @GetMapping("/findAll/{page}/{size}")
    public Map<String,Object> findAll(@PathVariable("page") Integer Page,@PathVariable("size") Integer size) {
 //查询所有的书籍信息

    @GetMapping("/findAll/{page}/{size}")
    public Map<String,Object> findAll(@PathVariable("page") Integer Page,@PathVariable("size") Integer size) {

        //准备数据 通过这两个参数,可以算出start   计算方法 start=size(page-1)
        int currentPage = Page;//当前是第几页
        int pageSize = size; //页面大小

        Map<String, Integer> map = new HashMap<String, Integer>();
        map.put("startIndex",(currentPage-1)*pageSize);
        map.put("pageSize",pageSize);
        List<Books> booklist =  bookService.queryBookList(map);
        HashMap<String,Object> result = new HashMap<>();
        Long totals = bookService.findTotals();
        result.put("books",booklist);
        result.put("totals",totals);
        return result;


    }

此外还要向前台传输查询到的所有的数量的个数,目的是计算根据总条数和页面大小计算出分几页。
mapper

    <select id="findTotals" resultType="Long">
        select count(*) from bookss
    </select>

dao中的方法

    //查询总数
    Long findTotals();

2、前端和后台的交互

关键部分代码:

  • 这个是请求地址,页面首次加载展示的信息,默认从1开始,页面展示6条信息
  • const _this = this区分对象
  • resp.data.books获取后台的数据
  • resp.data.totals获取后台的数据
  • _this.tableData,前台数据变量
  • prop="address"和后台的属性一致,获取哪个属性的信息
   created(){
      const _this = this
      axios.get('http://localhost:8181/book/findAll/1/6').then(function (resp) {
         _this.tableData = resp.data.books
        _this.total = resp.data.totals
      })
    }

分页

  • :page-size="6":自定义页面展示几条数据
  • :total="total":查询到的数据总数
    通过这两个数据就可以计数出有几个页面
    <el-pagination
      background
      layout="prev, pager, next"
      :page-size="6"
      :total="total"

     @current-change="page">
    </el-pagination>

动态改变页面展示信息

   page(currentPage){
        const _this = this
        axios.get('http://localhost:8181/book/findAll/'+currentPage+'/6').then(function (resp) {
          _this.tableData = resp.data.books
          _this.total = resp.data.totals
        })
      }
<template>

  <div>
  <el-table
    :data="tableData"
    border
    style="width: 100%">
    <el-table-column
      fixed
      prop="bookName"
      label="书籍名称"
      width="150">
    </el-table-column>
    <el-table-column
      prop="bookAuthor"
      label="书籍作者"
      width="120">
    </el-table-column>
    <el-table-column
      prop="price"
      label="书籍价格"
      width="120">
    </el-table-column>

    <el-table-column
      prop="address"
      label="书籍出版社"
      width="120">
    </el-table-column>

    <el-table-column
      prop="impression"
      label="印刷次数"
      width="120">
    </el-table-column>

    <el-table-column
      fixed="right"
      label="操作"
      width="100">
      <template slot-scope="scope">
        <el-button @click="handleClick(scope.row)" type="text" size="small">查看</el-button>
        <el-button type="text" size="small">编辑</el-button>
      </template>
    </el-table-column>
  </el-table>

    <el-pagination
      background
      layout="prev, pager, next"
      :page-size="6"
      :total="total"

     @current-change="page">
    </el-pagination>

  </div>
</template>

<script>
  export default {
    methods: {
      handleClick(row) {
        console.log(row);
      },
      page(currentPage){
        const _this = this
        axios.get('http://localhost:8181/book/findAll/'+currentPage+'/6').then(function (resp) {
          _this.tableData = resp.data.books
          _this.total = resp.data.totals
        })
      }
    },
    created(){
      const _this = this
      axios.get('http://localhost:8181/book/findAll/1/6').then(function (resp) {
         _this.tableData = resp.data.books
        _this.total = resp.data.totals
      })
    },
    data() {
      return {
        total:null,
        tableData: []
      }
    }
  }
</script>
相关文章
|
27天前
|
开发框架 前端开发 网络协议
Spring Boot结合Netty和WebSocket,实现后台向前端实时推送信息
【10月更文挑战第18天】 在现代互联网应用中,实时通信变得越来越重要。WebSocket作为一种在单个TCP连接上进行全双工通信的协议,为客户端和服务器之间的实时数据传输提供了一种高效的解决方案。Netty作为一个高性能、事件驱动的NIO框架,它基于Java NIO实现了异步和事件驱动的网络应用程序。Spring Boot是一个基于Spring框架的微服务开发框架,它提供了许多开箱即用的功能和简化配置的机制。本文将详细介绍如何使用Spring Boot集成Netty和WebSocket,实现后台向前端推送信息的功能。
268 1
|
1月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,包括版本兼容性、安全性、性能调优等方面。
148 1
|
21天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,创建并配置 Spring Boot 项目,实现后端 API;然后,使用 Ant Design Pro Vue 创建前端项目,配置动态路由和菜单。通过具体案例,展示了如何快速搭建高效、易维护的项目框架。
96 62
|
13天前
|
SQL 前端开发 关系型数据库
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
SpringBoot使用mysql查询昨天、今天、过去一周、过去半年、过去一年数据
45 9
|
19天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
36 2
|
19天前
|
Java Spring 容器
SpringBoot读取配置文件的6种方式,包括:通过Environment、@PropertySource、@ConfigurationProperties、@Value读取配置信息
SpringBoot读取配置文件的6种方式,包括:通过Environment、@PropertySource、@ConfigurationProperties、@Value读取配置信息
43 3
|
18天前
|
存储 easyexcel Java
SpringBoot+EasyExcel轻松实现300万数据快速导出!
本文介绍了在项目开发中使用Apache POI进行数据导入导出的常见问题及解决方案。首先比较了HSSFWorkbook、XSSFWorkbook和SXSSFWorkbook三种传统POI版本的优缺点,然后根据数据量大小推荐了合适的使用场景。接着重点介绍了如何使用EasyExcel处理超百万数据的导入导出,包括分批查询、分批写入Excel、分批插入数据库等技术细节。通过测试,300万数据的导出用时约2分15秒,导入用时约91秒,展示了高效的数据处理能力。最后总结了公司现有做法的不足,并提出了改进方向。
|
21天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
1月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用
【10月更文挑战第8天】本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,通过 Spring Initializr 创建并配置 Spring Boot 项目,实现后端 API 和安全配置。接着,使用 Ant Design Pro Vue 脚手架创建前端项目,配置动态路由和菜单,并创建相应的页面组件。最后,通过具体实践心得,分享了版本兼容性、安全性、性能调优等注意事项,帮助读者快速搭建高效且易维护的应用框架。
41 3
|
1月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
77 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库