手动实现分页功能

先理解分页查询原理

采用limit语句来实现分页

-- 页码PageNum  每页数据条目PageSize=5
-- 第一页 PageNum=0, limit 0,5
SELECT * FROM sys_user limit 0,5;
-- 第二页 PageNum=1, limit 5,5
SELECT * FROM sys_user limit 5,5;
-- 公式: limit (PageNum-1)*PageSize, PageSize


代码实现

Controller

Mapper

相对应前端页面部分
HomeView.Vue

接口测试

前后端联动

Springboot跨域设置

有前端跨域问题

我们在后端统一设置,新建config-CorsConfig.java

跨域具体代码

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;@Configuration
public class CorsConfig {// 当前跨域请求最大有效时长。这里默认1天private static final long MAX_AGE = 24 * 60 * 60;@Beanpublic CorsFilter corsFilter() {UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();CorsConfiguration corsConfiguration = new CorsConfiguration();corsConfiguration.addAllowedOrigin("http://localhost:8080"); // 1 设置访问源地址corsConfiguration.addAllowedHeader("*"); // 2 设置访问源请求头corsConfiguration.addAllowedMethod("*"); // 3 设置访问源请求方法corsConfiguration.setMaxAge(MAX_AGE);source.registerCorsConfiguration("/**", corsConfiguration); // 4 对接口配置跨域设置return new CorsFilter(source);}
}

前端具体代码:

HomeView.Vue

<template><el-container style="min-height: 100vh"><el-aside :width="sideWidth + 'px'" style="box-shadow: 2px 0 6px rgb(0 21 41 / 35%);"><el-menu :default-openeds="['1', '3']" style="min-height: 100%; overflow-x: hidden"background-color="rgb(48, 65, 86)"text-color="#fff"active-text-color="#ffd04b":collapse-transition="false":collapse="isCollapse"><div style="height: 60px; line-height: 60px; text-align: center"><img src="../assets/logo.png" alt="" style="width: 20px; position: relative; top: 5px; right: 5px"><b style="color: white" v-show="logoTextShow">后台管理系统</b></div><el-submenu index="1"><template slot="title"><i class="el-icon-message"></i><span slot="title">导航一</span></template><el-menu-item-group title="分组2"><el-menu-item index="1-3">选项3</el-menu-item></el-menu-item-group><el-submenu index="1-4"><template slot="title">选项4</template><el-menu-item index="1-4-1">选项4-1</el-menu-item></el-submenu></el-submenu><el-submenu index="2"><template slot="title"><i class="el-icon-menu"></i><span slot="title">导航二</span></template><el-submenu index="2-4"><template slot="title">选项4</template><el-menu-item index="2-4-1">选项4-1</el-menu-item></el-submenu></el-submenu><el-submenu index="3"><template slot="title"><i class="el-icon-setting"></i><span slot="title">导航三</span></template><el-submenu index="3-4"><template slot="title">选项4</template><el-menu-item index="3-4-1">选项4-1</el-menu-item></el-submenu></el-submenu></el-menu></el-aside><el-container><el-header style="font-size: 12px; border-bottom: 1px solid #ccc; line-height: 60px; display: flex"><div style="flex: 1; font-size: 20px"><span :class="collapseBtnClass" style="cursor: pointer" @click="collapse"></span></div><el-dropdown style="width: 70px; cursor: pointer"><span>王小虎</span><i class="el-icon-arrow-down" style="margin-left: 5px"></i><el-dropdown-menu slot="dropdown" ><el-dropdown-item style="font-size: 14px; padding: 5px 0">个人信息</el-dropdown-item><el-dropdown-item style="font-size: 14px; padding: 5px 0">退出</el-dropdown-item></el-dropdown-menu></el-dropdown></el-header><el-main><div style="margin-bottom: 30px"><el-breadcrumb separator="/"><el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item><el-breadcrumb-item>用户管理</el-breadcrumb-item></el-breadcrumb></div><div style="margin: 10px 0"><el-input style="width: 200px" placeholder="请输入名称" suffix-icon="el-icon-search" v-model="username"></el-input><el-input style="width: 200px" placeholder="请输入邮箱" suffix-icon="el-icon-message" class="ml-5"></el-input><el-input style="width: 200px" placeholder="请输入地址" suffix-icon="el-icon-position" class="ml-5"></el-input><el-button class="ml-5" type="primary" @click="load">搜索</el-button></div><div style="margin: 10px 0"><el-button type="primary">新增 <i class="el-icon-circle-plus-outline"></i></el-button><el-button type="danger">批量删除 <i class="el-icon-remove-outline"></i></el-button><el-button type="primary">导入 <i class="el-icon-bottom"></i></el-button><el-button type="primary">导出 <i class="el-icon-top"></i></el-button></div><el-table :data="tableData" border stripe :header-cell-class-name="headerBg"><el-table-column prop="id" label="ID" width="80"></el-table-column><el-table-column prop="username" label="用户名" width="140"></el-table-column><el-table-column prop="nickname" label="昵称" width="120"></el-table-column><el-table-column prop="email" label="邮箱"></el-table-column><el-table-column prop="phone" label="电话"></el-table-column><el-table-column prop="address" label="地址"></el-table-column><el-table-column label="操作"  width="200" align="center"><template slot-scope="scope"><el-button type="success">编辑 <i class="el-icon-edit"></i></el-button><el-button type="danger">删除 <i class="el-icon-remove-outline"></i></el-button></template></el-table-column></el-table><div style="padding: 10px 0"><el-pagination@size-change="handleSizeChange"@current-change="handleCurrentChange":current-page="pageNum":page-sizes="[2, 5, 10, 20]":page-size="pageSize"layout="total, sizes, prev, pager, next, jumper":total="total"></el-pagination></div></el-main></el-container></el-container>
</template><script>export default {name: 'Home',data() {return {tableData: [],total: 0,pageNum: 1,pageSize: 2,username: "",msg: "hello Joyce",collapseBtnClass: 'el-icon-s-fold',isCollapse: false,sideWidth: 200,logoTextShow: true,headerBg: 'headerBg'}},created() {// 请求分页查询数据this.load()},methods: {collapse() {  // 点击收缩按钮触发this.isCollapse = !this.isCollapseif (this.isCollapse) {  // 收缩this.sideWidth = 64this.collapseBtnClass = 'el-icon-s-unfold'this.logoTextShow = false} else {   // 展开this.sideWidth = 200this.collapseBtnClass = 'el-icon-s-fold'this.logoTextShow = true}},load() {fetch("http://localhost:9090/user/page?pageNum="+this.pageNum+"&pageSize=" + this.pageSize + "&username=" + this.username).then(res => res.json()).then(res => {console.log(res)this.tableData = res.datathis.total = res.total})},handleSizeChange(pageSize) {console.log(pageSize)this.pageSize = pageSizethis.load()},handleCurrentChange(pageNum) {console.log(pageNum)this.pageNum = pageNumthis.load()}}
}
</script><style>
.headerBg {background: #eee!important;
}
</style>

后端完整代码:

UserController.java

package com.zj.demo.controller;import com.zj.demo.entity.User;
import com.zj.demo.mapper.UserMapper;
import com.zj.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;import java.util.HashMap;
import java.util.List;
import java.util.Map;@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserMapper userMapper;@Autowiredprivate UserService userService;// 新增和修改@PostMappingpublic Integer save(@RequestBody User user) {// 新增或者更新return userService.save(user);}// 查询所有数据@GetMappingpublic List<User> index() {List<User> all = userMapper.findAll();return all;}@DeleteMapping("/{id}")public Integer delete(@PathVariable Integer id) {return userMapper.deleteById(id);}// 分页查询//  接口路径:/user/page?pageNum=1&pageSize=10// @RequestParam接受// limit第一个参数 = (pageNum - 1) * pageSize// pageSize@GetMapping("/page")public Map<String, Object> findPage(@RequestParam Integer pageNum,@RequestParam Integer pageSize,@RequestParam String username) {pageNum = (pageNum - 1) * pageSize;username = "%" + username + "%";List<User> data = userMapper.selectPage(pageNum, pageSize, username);Integer total = userMapper.selectTotal(username);Map<String, Object> res = new HashMap<>();res.put("data", data);res.put("total", total);return res;}
}

UserMapper.java

package com.zj.demo.mapper;import com.zj.demo.entity.User;
import org.apache.ibatis.annotations.*;import java.util.List;@Mapper
public interface UserMapper {@Select("SELECT * from sys_user")List<User> findAll();@Insert("INSERT into sys_user(username, password,nickname,email,phone,address) VALUES (#{username}, #{password}," +" #{nickname}, #{email},#{phone}, #{address})")int insert(User user);int update(User user);@Delete("delete from sys_user where id = #{id}")Integer deleteById(@Param("id") Integer id);@Select("select * from sys_user where username like #{username} limit #{pageNum}, #{pageSize}")List<User> selectPage(Integer pageNum, Integer pageSize, String username);@Select("select count(*) from sys_user where username like concat('%', #{username}, '%') ")Integer selectTotal(String username);}

测试:

补充事项:

忽略某个字段【如Password字段】,不展示给前端,采用@JsonIgnore注解

SpringBoot+VUE前后端分离项目学习笔记 - 【08 SpringBoot实现分页查询】相关推荐

  1. 从0搭建一个Springboot+vue前后端分离项目(五)创建后台Springboot工程

    前往Springboot官网 https://start.spring.io/ 选择版本和依赖 SpringWeb: 可以实现接口的开发; MysqlDriver:连接数据库; Lombok简化jav ...

  2. 从0搭建一个Springboot+vue前后端分离项目(一)安装工具,创建项目

    从0搭建一个Springboot+vue前后端分离项目(二)使用idea进行页面搭建+页面搭建 参考学习vue官网文档 https://v3.cn.vuejs.org/guide/installati ...

  3. 阿里服务器部署springboot+vue前后端分离项目

    服务器部署springboot+vue前后端分离项目 最近刚刚在实习熟悉公司的业务,所有尝试着自己将项目部署到服务器上.本次部署的项目是Spring Boot+Vue前后端分离项目,后端使用的技术有M ...

  4. SpringBoot+Vue前后端分离项目的搭建及简单开发(这次保证看明白~)

    文章目录 概述 一.搭建SpringBoot后端 1.sql脚本 2.新建SpringBoot项目 3.MP代码生成 4.编写Controller 二.搭建Vue前端 1.IDEA安装Vue.js插件 ...

  5. 大屏监控系统实战(4)-如何将SpringBoot+Vue前后端分离项目一次打包为一个Jar包运行?

    玩过最新版Dubbo管控台的都知道,人家是个前后端分离的项目,可是一条打包命令能让两个项目整合在一起,生成一个jar包,这样的好处显而易见,部署的时候服务器不需要安装node环境单独部署前端项目,或者 ...

  6. SSM项目/SpringBoot项目/SpringBoot+Vue前后端分离项目 图片上传并查看功能实现汇总

    SSM项目下的图片上传: 1.前端Js代码:用户点击"上传头像"按钮后,会执行uploadPhoto()的方法. <button type="button" ...

  7. springboot+vue前后端分离项目(后台管理系统)

    学习笔记 学习资源来自于B站UP,up他讲的非常详细,对于熟悉两大框架很有用. 我的作业源代码在文章末尾,欢迎有需要的同学,学习参考使用,内置SQL文件,导入后,开启springboot和vue服务即 ...

  8. springboot+vue前后端分离项目(后台管理系统

    2.注册页面这两个页面可以自由切换 3.root登录后的默认页面以及高亮显示 4.几个页面的展示 ![在这里插入图片描述](https://img-blog.csdnimg.cn/04b499bfbf ...

  9. springboot + vue 前后端分离项目部署及服务器配置

    项目简介 项目实现效果 主要实现: 注册.登录.新增.删除员工.websocket消息推送等功能 项目yml配置 mybatis:type-aliases-package: com.lps.trave ...

最新文章

  1. python调用gitlab api自动合并分支_Python3使用 GitLab API 进行批量合并分支
  2. Quartz2D的内存管理
  3. UA SIE545 优化理论基础1 例题2 Farkas定理与相关结论
  4. [SDOI2011]染色
  5. 局域网的分层结构的优点及分层原理
  6. Myeclipse修改jdk版本流程
  7. 程序员的灯下黑:如果你想考研究生或是研究生
  8. unity用代码生成的物体或line renderer让其在确定的某一个层里面的方法
  9. 乘法分配律逆运算是什么意思_聚类,我们先操弄一下Kmeans,看看什么是非监督学习...
  10. 你焊接过最小的贴片器件是多大?
  11. 15个提高编程技巧的JavaScript工具
  12. SSD、eMMC、UFS的区别
  13. 周鸿祎《智能主义》读书笔记
  14. R语言:修改chart.Correlation()函数绘制相关性图——完美出图
  15. plc顺序控制设计法的设计基本步骤
  16. Nacos 修改密码
  17. 什么叫反射以及反射的优缺点
  18. 安卓开发培训!一次违反常规的安卓大厂面试经历,实战解析
  19. 盘一盘 Python 特别篇 19 - 天数计数|年限
  20. Java中线程池拒绝策略——代码讲解

热门文章

  1. 使用Nginx部署PHP项目
  2. x86/IA-32/AMD64/x86_64/IA-64等的区别和联系
  3. C++的后端框架从头开发
  4. python怎么让按钮透明,python – 有没有办法用Tkinter创建透明窗口?
  5. 极客历史记录的这一周:YouTube上市,蓝光与高清DVD以及您的所有基地都属于我们...
  6. 统计语义分割标签文件夹中的分割类别以及像素点数目
  7. java 团购_java短信接口和团购网站强强结合,优势明显
  8. vscode最皮实的C++格式化的配置方法
  9. 为啥好多芯片创业公司都用RISC-V?
  10. 接纳自己会不会使人“不求上进”?[爱自己]到底是什么意思