jquey+mybatis-plus实现简单分页功能

这篇文章介绍一下怎么通过JQuery结合mybatis-plus的分页插件实现原生HTML页面的分页效果,没有使用任何前端框架,主要是对前端知识的应用。

创建Springboot项目

Intellij IDEA中创建一个Springboot项目,项目名为pager。

添加必须的依赖包

修改项目的pom.xml,添加一些基本的依赖:jdbc、mysql、mybatis、mybatis-plus、lombok、druid数据库连接池。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.9</version><relativePath /></parent><groupId>cn.edu.sgu.www</groupId><artifactId>pager</artifactId><version>0.0.1-SNAPSHOT</version><name>pager</name><description>jquey+mybatis-plus实现简单分页功能</description><properties><java.version>1.8</java.version><mysql.version>8.0.28</mysql.version><druid.version>1.1.21</druid.version><lombok.version>1.18.22</lombok.version><mybatis.version>2.2.2</mybatis.version><mybatis-plus.version>3.5.1</mybatis-plus.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version></dependency><!--mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql.version}</version></dependency><!--druid数据库连接池--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>${druid.version}</version></dependency><!--mybatis--><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${mybatis.version}</version></dependency><!--mybatis-plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatis-plus.version}</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

添加数据源配置

将项目默认的配置文件application.properties重命名为application.yml。

添加启动端口、数据库、日志隔离级别的配置~

server:port: 8090logging:level:cn.edu.sgu.www.pager: debugspring:application:name: pagerdatasource:username: rootpassword: rooturl: jdbc:mysql://localhost:3306/pagerdriver-class-name: com.mysql.cj.jdbc.Drivertype: com.alibaba.druid.pool.DruidDataSource

准备数据库表

创建数据库pager,然后执行项目src/main/resources目录下的pager.sql脚本文件。

添加mybatis-plus分页插件

package cn.edu.sgu.www.pager.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;/*** Mybatis-Plus配置类* @author heyunlin* @version 1.0*/
@Configuration
public class MybatisPlusConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();// 添加分页插件interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceptor;}}

创建响应相关实体类

响应状态码枚举类

package cn.edu.sgu.www.pager.restful;/*** 响应状态码* @author heyunlin* @version 1.0*/
public enum ResponseCode {/*** 请求成功*/OK(200),/*** 失败的请求*/BAD_REQUEST(400),/*** 未授权*/UNAUTHORIZED(401),/*** 禁止访问*/FORBIDDEN(403),/*** 找不到*/NOT_FOUND(404),/*** 不可访问*/NOT_ACCEPTABLE(406),/*** 冲突*/CONFLICT(409),/*** 服务器发生异常*/ERROR(500);private final Integer value;ResponseCode(Integer value) {this.value = value;}public Integer getValue() {return value;}}

web响应实体类

package cn.edu.sgu.www.pager.restful;import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.Data;import java.io.Serializable;/*** @author heyunlin* @version 1.0*/
@Data
public class JsonResult<T> implements Serializable {private static final long serialVersionUID = 18L;/*** 响应数据*/private T data;/*** 响应状态码*/private Integer code;/*** 响应提示信息*/private String message;/*** 请求是否成功*/private boolean success;/*** 成功提示*/private static final String successMessage = "请求成功";public static <T> JsonResult<T> success(String message, T data) {JsonResult<T> jsonResult = new JsonResult<>();jsonResult.setCode(ResponseCode.OK.getValue());jsonResult.setMessage(message);jsonResult.setSuccess(true);jsonResult.setData(data);return jsonResult;}public static <T> JsonResult<JsonPage<T>> restPage(Page<T> page) {JsonPage<T> jsonPage = JsonPage.restPage(page);return success(successMessage, jsonPage);}}

分页查询结果

package cn.edu.sgu.www.pager.restful;import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.Data;import java.io.Serializable;
import java.util.List;/*** @author heyunlin* @version 1.0*/
@Data
public class JsonPage<T> implements Serializable {private static final long serialVersionUID = 18L;/*** 总记录数*/private Long total;/*** 查询结果*/private List<T> rows;/*** 根据Page对象构建JsonPage对象* @param page Page<T>* @return JsonPage<T>*/public static <T> JsonPage<T> restPage(Page<T> page) {JsonPage<T> jsonPage = new JsonPage<>();jsonPage.setTotal(page.getTotal());jsonPage.setRows(page.getRecords());return jsonPage;}}

 

分页参数的对象

package cn.edu.sgu.www.pager.restful;import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.Data;/*** @author heyunlin* @version 1.0*/
@Data
public class Pager<T> {/*** 页数*/private Integer page;/*** 每页的记录数*/private Integer rows;/*** 根据Pager创建Page对象* @param pager Pager* @return Page*/public static <T> Page<T> ofPage(Pager<T> pager) {return new Page<T>(pager.getPage(), pager.getRows());}}

创建数据库实体类

package cn.edu.sgu.www.pager.entity;import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;import java.io.Serializable;
import java.time.LocalDateTime;/*** @author heyunlin* @version 1.0*/
@Data
public class Song implements Serializable {private static final long serialVersionUID = 18L;private String id;/*** 歌曲名*/private String name;/*** 歌手*/private String singer;/*** 描述信息*/private String note;/*** 最后一次修改时间*/@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")private LocalDateTime lastUpdateTime;
}

创建持久层接口

继承mybatis-plus的BaseMapper接口

package cn.edu.sgu.www.pager.mapper;import cn.edu.sgu.www.pager.entity.Song;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;/*** @author heyunlin* @version 1.0*/
@Mapper
public interface SongMapper extends BaseMapper<Song> {}

创建业务层接口

SongService

package cn.edu.sgu.www.pager.service;import cn.edu.sgu.www.pager.entity.Song;
import cn.edu.sgu.www.pager.restful.Pager;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;/*** @author heyunlin* @version 1.0*/
public interface SongService {/*** 分页查询歌曲列表* @param pager 分页参数* @return Page<Song>*/Page<Song> selectByPage(Pager<Song> pager);
}

SongServiceImpl

package cn.edu.sgu.www.pager.service.impl;import cn.edu.sgu.www.pager.entity.Song;
import cn.edu.sgu.www.pager.mapper.SongMapper;
import cn.edu.sgu.www.pager.restful.Pager;
import cn.edu.sgu.www.pager.service.SongService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;/*** @author heyunlin* @version 1.0*/
@Service
public class SongServiceImpl implements SongService {private final SongMapper songMapper;@Autowiredpublic SongServiceImpl(SongMapper songMapper) {this.songMapper = songMapper;}@Overridepublic Page<Song> selectByPage(Pager<Song> pager) {Page<Song> page = Pager.ofPage(pager);return songMapper.selectPage(page, null);}}

创建控制器类

package cn.edu.sgu.www.pager.controller;import cn.edu.sgu.www.pager.entity.Song;
import cn.edu.sgu.www.pager.restful.JsonPage;
import cn.edu.sgu.www.pager.restful.JsonResult;
import cn.edu.sgu.www.pager.restful.Pager;
import cn.edu.sgu.www.pager.service.SongService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** @author heyunlin* @version 1.0*/
@RestController
@RequestMapping(path = "/song", produces = "application/json;charset=utf-8")
public class SongController {private final SongService songService;@Autowiredpublic SongController(SongService songService) {this.songService = songService;}@GetMapping("/selectByPage")public JsonResult<JsonPage<Song>> selectByPage(Pager<Song> pager) {Page<Song> page = songService.selectByPage(pager);return JsonResult.restPage(page);}}

创建前端页面

song_list.html

在页面创建一个带标题的表格,然后在表格下方创建一个简单的分页组件~

可以调整每页显示几条数据,上一页、下一页、指定页数的跳转。

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>权限管理页面</title><script src="/js/jquery.min.js"></script><script src="/js/ajaxUtils.js"></script><script src="/js/song_list.js"></script><style>.table {height: 635px;overflow-y: scroll;border: 1px black solid;}#pageNum {width: 50px;}</style></head><body><div class="table"><table border="1"><thead>歌曲列表</thead><tbody id="song_list"></tbody></table></div><div>每页展示<select id="rows"></select>条记录&emsp;<button type="button" id="pre">上一页</button>&emsp;当前第<span id="page">1</span>页&emsp;<button type="button" id="next">下一页</button>&emsp;前往第<input type="number" id="pageNum" />页</div></body>
</html>

song_list.js

/*** 总页数*/
let total;
/*** 当前页*/
let page = 1;
/*** 每页显示的记录数*/
let rows = 15;
/*** 页码*/
let pageList = [15, 50 ,100, 200, 500];/*** 加载表格数据*/
function loadData() {/*** 表头*/let thead = "";/*** 表格体*/let tbody = "";thead += "<tr>";thead += "<th>歌曲ID</th>";thead += "<th>歌曲名</th>";thead += "<th>歌手</th>";thead += "<th>歌曲信息</th>";thead += "<th>最后一次修改时间</th>";thead += "</tr>";ajaxGet("/song/selectByPage", {page: page,rows: rows}, function (resp) {let data = resp.data;let list = data.rows;total = data.total;for (let i = 0; i < list.length; i++) {let data = list[i];tbody += "<tr>";tbody += "<td>" + data.id + "</td>";tbody += "<td>" + data.name + "</td>";tbody += "<td>" + data.singer + "</td>";tbody += "<td>" + data.note + "</td>";tbody += "<td>" + data.lastUpdateTime + "</td>";tbody += "</tr>";}$("#song_list").empty().append(thead + tbody);}, error);
}/*** 渲染分页组件*/
function fetchRows() {let options = "";for (let i = 0; i < pageList.length; i++) {let page = pageList[i];options += "<option value='" + page + "'>" + page + "</option>";}$("#rows").append(options);
}$(document).ready(function () {// 加载表格数据loadData();// 渲染分页组件fetchRows();/*** 绑定下拉框改变事件*/$("#rows").change(function () {// 设置每页记录数为下拉框的值rows = $(this).val();loadData();});/*** 上一页*/$("#pre").on("click", function () {if (page > 1) {page--;// 重新加载表格数据loadData();// 设置当前是第几页$("#page").html(page);}});/*** 下一页*/$("#next").on("click", function () {let maxPage = (total % rows) > 0 ? (total / rows + 1) : (total / rows);if (page <= maxPage - 1) {page++;// 重新加载表格数据loadData();// 设置当前是第几页$("#page").html(page);}});/*** 绑定键盘事件*/$("#pageNum").keydown(function () {let event = window.event;// 不允许输入空格if(event.keyCode === 32) {event.returnValue = false;} else if(event.keyCode === 13) {// 获取最大页数let maxPage = total % rows > 0 ? (total / rows + 1) : (total / rows);// 获取输入框内容let pageNum = parseInt($(this).val());// 修改页数page = pageNum > maxPage ? maxPage : pageNum;// 加载表格loadData();// 设置当前输入框的值$(this).val(page);// 设置当前在第几页$("#page").html(page);}});});

好了,文章就分享到这里了,需要代码的可以从git下载:

jquey+mybatis-plus实现简单分页功能icon-default.png?t=N7T8https://gitee.com/muyu-chengfeng/pager.git

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/855522.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】—MySQL安装

文章目录 前言一、下载官方MySQL包二、下载完成后&#xff0c;通过xftp6上传到Linux服务器上三、解压MySQL安装包四、在安装目录下执行rpm安装&#xff0c;请按顺序依次执行。五、配置MySQL六、启动MySQL数据库七、退出&#xff0c;重新登录数据库 前言 本文主要介绍在Linux环境…

创建Docker容器与外部机通信(独立IP的方式)

需求&#xff1a;希望外部可以直接通过不同IP地址访问宿主机上的Docker容器&#xff0c;而不需要端口映射&#xff08;同一个IP不同的端口与外部通讯&#xff09;&#xff0c;这通常涉及到在宿主机的网络层面进行更高级的配置&#xff0c;比如使用IP伪装&#xff08;IP masquer…

团队协同渗透测试报告输入输出平台部署

目录 简介 文章来源 部署环境 文件下载 开始安装 系统初始化 免责声明 结语 简介 因应监管部需求&#xff0c;国内访问Docker源pull镜像开始变得复杂且困难起来了&#xff0c;大佬github给的在线/离线安装脚本跑了很久也无法拉取到镜像&#xff0c;所以将以前的镜像打…

类的继承性(Java)

本篇学习面向对象语言的第二特性——继承性。 1 .为什么需要继承 我们来举个例子&#xff1a;我们知道动物有很多种&#xff0c;是一个比较大的概念。在动物的种类中&#xff0c;我们熟悉的有猫(Cat)、狗(Dog)等动物&#xff0c;它们都有动物的一般特征&#xff08;比如能够吃…

【YOLOv9改进[注意力]】在YOLOv9中使用注意力CascadedGroupAttention(2023)的实践 + 含全部代码和详细修改方式

本文将进行在YOLOv9中使用注意力CascadedGroupAttention的实践,助力YOLOv9目标检测效果的实践,文中含全部代码、详细修改方式。助您轻松理解改进的方法。 改进前和改进后的参数对比: 目录 一 CascadedGroupAttention 二 在YOLOv9中使用注意力CascadedGroupAttention的实…

Rcmp: Reconstructing RDMA-Based Memory Disaggregation via CXL——论文阅读

TACO 2024 Paper CXL论文阅读笔记整理 背景 RDMA&#xff1a;RDMA是一系列协议&#xff0c;允许一台机器通过网络直接访问远程机器中的数据。RDMA协议通常固定在RDMA NIC&#xff08;RNIC&#xff09;上&#xff0c;具有高带宽&#xff08;>10 GB/s&#xff09;和微秒级延…

云计算 | (八)基本云架构

文章目录 📚负载分布架构🐇负载分布架构🐇单机系统🐇应用、数据库分离🐇应用服务集群🐇微服务🐇负载均衡分类🐇Nginx🐇负载均衡算法⭐️轮询法⭐️随机法⭐️源地址哈希法⭐️加权轮询法⭐️加权随机法⭐️键值范围法📚资源池架构📚动态可扩展架构📚弹…

Vatee万腾平台:智能科技的领航者

随着科技的飞速发展&#xff0c;数字化转型已成为企业、行业乃至整个社会不可逆转的趋势。在这个变革的浪潮中&#xff0c;Vatee万腾平台凭借其卓越的技术实力、前瞻的战略眼光和卓越的服务品质&#xff0c;成为了智能科技的领航者。 Vatee万腾平台致力于为企业提供全方位的数字…

java:spring actuator扩展原有info endpoint的功能

# 项目代码资源&#xff1a; 可能还在审核中&#xff0c;请等待。。。 https://download.csdn.net/download/chenhz2284/89437506 # 项目代码 【pom.xml】 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId&…

客户端输入网址后发生的全过程解析(协议交互、缓存、渲染)

目录 1. 输入 URL 并按下回车键2. DNS 解析3. TCP 连接4. 发送 HTTP 请求5. 服务器处理请求6. 发送 HTTP 响应7. 浏览器接收响应8. 渲染网页9. 执行脚本10. 处理其他资源11. TLS/SSL 加密&#xff08;如果使用 HTTPS&#xff09;握手过程 12. 协议协商和优化 总结 1. 输入 URL …

Ubuntu下FastDDS的源码编译和简单测试

FastDDS是eprosima公司开发的DDS&#xff08;Data Distribution Service&#xff09;库&#xff0c;使用的语言是C&#xff0c;自称是"The Most Complete Open Source DDS Middleware"&#xff0c;其官网是https://eprosima.com/&#xff0c;FastDDS源码在https://gi…

【TB作品】MSP430G2553,单片机,口袋板,流量积算仪设计

题9 流量积算仪设计 某型流量计精度为0.1%, 满刻度值为4L/s&#xff0c;流量计输出为4—20 mA。 设计基于MSP430及VFC32的流量积算仪。 具体要求 (1) 积算仪满刻度10000 L&#xff0c;精度0.1 L; 计满10000 L&#xff0c;自动归零并通过串口&#xff08;RS232&#xff09;向上位…

【Cloudscapes V2】Blender商城10周年免费领取礼物超逼真的Vdb云和爆炸合集烟雾体积云字体符号轨迹火焰粒子

6月19号的限时免费领取插件挺牛的&#xff0c;可以在blender里渲染体积云、爆炸特效、火焰、烟雾等效果&#xff0c;非常逼真。 Blender商城10周年免费领取礼物&#xff1a;https://blendermarket.com/birthday Cloudscapes V2 - 超逼真的 Vdb 云和爆炸合集 CloudScapes 是 …

优思学院|怎么选择精益生产培训才不会被坑?

在选择精益生产培训公司时&#xff0c;我们需要从多个角度去思考。企业若只是盲目地跟风&#xff0c;这样的做法无异于缘木求鱼。精益生产的核心在于发现和消除那些不增值的活动&#xff0c;从而提升产品的质量和生产效率&#xff0c;但要知道的是&#xff0c;发现和改进的人就…

揭秘与应对:一打开移动硬盘就提示格式化的深度解析

在日常的数据存储与交换中&#xff0c;移动硬盘因其便携性和大容量而备受青睐。然而&#xff0c;有时我们可能会遇到一种令人困扰的现象&#xff1a;当试图打开移动硬盘时&#xff0c;系统会弹出一个警告窗口&#xff0c;提示“磁盘未被格式化&#xff0c;是否现在格式化&#…

Llama 3 大型语言模型到底是如何炼成的?

Meta 在今年 4 月开源了 Llama 3 大型语言模型&#xff0c;这是 Meta&#xff0c;也是整个行业迄今为止功能最强大的开源 LLM。 那么 Meta 是如何训练 Llama 3 大型语言模型的&#xff0c;又在训练过程中遇到了什么问题&#xff0c;提出了什么新的解决方案呢&#xff1f;近日&…

计算机行业的现状与未来之2024

年年都说编程好&#xff0c;编程工资涨不了。 人家骑车送外卖&#xff0c;月入两万好不好。 一、计算机专业的背景与现状 在过去几十年里&#xff0c;计算机科学相关专业一直是高考考生的热门选择。无论是计算机科学与技术、软件工程&#xff0c;还是人工智能与大数据&#xff…

防止员工离职导致数据泄露,员工离职后把文件带出公司

中科数安的电脑文件资料透明加密防泄密系统确实能够在一定程度上防止员工离职导致的数据泄露。以下是具体的分析&#xff1a; www.weaem.com 访问控制与权限管理&#xff1a;系统实施了严格的权限管理制度&#xff0c;对核心文件和数据资源进行细致的访问权限划分。这意味着&am…

《无与伦比》Centos7 扩容到已有逻辑卷

命令可以查找硬盘和分区情况 fdisk -l lsblk

掌握市场脉动,Anzo Capital深度解析随机指标的超买超卖秘密

随机指标&#xff0c;作为市场分析的利器&#xff0c;主要用于判断资产价格的相对位置&#xff0c;是揭示市场超买与超卖状态的关键工具&#xff0c;也是大多数交易平台的标准配置。它以独特的视角&#xff0c;帮助交易者捕捉市场的微妙变化。下面跟随Anzo Capital视角&#xf…