springboot+bootstrap实现分页

2023-10-30

写在前面
  你们好,我是小庄。很高兴能和你们一起学习SpringBoot和bootstrap。如果您对Java感兴趣的话可关注我的动态.
  写博文是一种习惯,在这过程中能够梳理和巩固知识。

一、技术介绍

用到的技术:
spring bootbootstrapthemleafjpajavascript
实现的思路:
1.根据页数进行分页查询,分页栏用javascript实现,把页数作为参数传到后台
2.后台使用JpaRepository的默认方法实现分页查询功能
3.后台将总页数,列表内容,当前页数存到model中,前端通过themleaf获取model中的内容
页面展示

二、后端代码展示

1.pom.xml
注:mysql版本根据自己版本而定

<?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.3.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.zwz</groupId>
    <artifactId>springbootjpa</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springbootjpa</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <!--jpa-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <!--thymeleaf-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.6</version>
        </dependency>
        <!--Druid数据源依赖-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.12</version>
        </dependency>
        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2.编写application.properties

#数据库用户名
spring.datasource.username=填入数据库用户名
#数据库用户密码
spring.datasource.password=填入数据库密码
#数据库的链接,localhost表示本地
spring.datasource.url=jdbc:mysql://localhost:3306/填入数据库名?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&allowMultiQueries=true&useSSL=false
#这个是数据库的驱动,版本5.7的。如果8.0版本不是使用这个
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#配置数据源
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#清理缓存
spring.thymeleaf.cache = false
#如果数据库中有相同表则更新数据库,如果没有则创建新表
spring.jpa.hibernate.ddl-auto=update
#是否展示数据库视图
spring.jpa.show-sql=true

3.编写接口继承JpaRepository
注:这里的接口可以自定义方法实现数据库操作,也有内置代码

public interface UserRepository extends JpaRepository<User, Integer> {
}

4.JpaRepository查询介绍
JpaRepository提供了如下表所述的内置查询

方法 描述
List findAll() 返回所有实体
List findAll(Iterable ids) 返回指定id的所有实体
T getOne(ID id) 根据id返回对应的实体,如果未找到,则返回空
List findAll(Sort sort) 返回所有实体,按照指定顺序排序返回
Page findAll(Pageable pageable) 返回实体列表,实体的offset和limit通过pageable来指定

PageRequest是Pageable的实现类,可以通过以下工厂方法创建:

//page表示页数,size表示分页条数,sort表示排列顺序,
public static PageRequest of(int page,int size)

public static PageRequest of(int page,int size,Sort sort)

public static PageRequest of(int page,int size,Direction direction,String ... properties)

5.运用JpaRepository的内置查询方法进行分页查询
注:UserRepository是继承JpaRepository的接口

@Controller
public class UserController {
    @Autowired
    UserRepository userRepository;
/**
     *pageNumber是从前端传进来的参数
     * @param pageNumber 页数
     * @param model
     */
    @RequestMapping("/user/findUser")
    public String userPage(@RequestParam("pageNum") String pageNumber, Model model){
        Integer pageNum;
        if(pageNumber==null){
            pageNum=1;
        }
        //设置记录条数
        int size=8;
        //将String转为Inter类型
        pageNum=Integer.valueOf(pageNumber);
        /**
         * pageNum表示页数
         * size表示
         * 这里使用jpaRepository的内置分页查询
         */
        PageRequest pageReques=PageRequest.of(pageNum-1,size);   //获取第n页的m条记录
        Page<User>  page=userRepository.findAll(pageReques);
        //获取结果集
        List<User> users=page.getContent();
        //获取总页数
        int pageSum=page.getTotalPages();
        System.out.println("总页数"+pageSum);
        //获取总数据
        long sum=page.getTotalElements();
        System.out.println("总数据"+sum);
        //分页查询用户列表
        //存到model中前端使用
        //总条数
        model.addAttribute("sum",sum);
        //总页数
        model.addAttribute("pageSum",pageSum);
        //用户列表
        model.addAttribute("users",users);
        //当前页数
        model.addAttribute("pageNum",pageNum);
        return "user";
    }
}

上面提到的Page类的方法总结:

//前面是类型,后面是方法调用
int getTotalPages()    获取总的页数

long getTotalElements()   返回总数

List getContent()     返回某页的结果集

后端的分页完成了,下面来使用themleaf在前端进行获取后端的内容

三、前端代码展示

前言:这里使用到了bootstrap,所以要将jquery-3.3.1.min.js,bootstrap.min.css和bootstrap.min.js导入的项目中

<link rel="stylesheet" href="/css/bootstrap.min.css" type="text/css" >
    <script type="text/javascript" src="/js/jquery-3.3.1.min.js"></script>
    <script src="/js/bootstrap.min.js"></script>

下面是我写的前端代码

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <link rel="shortcut icon" href="img/favicon.ico"/>
    <link rel="bookmark" href="img/favicon.ico"/>
    <link rel="stylesheet" href="/css/bootstrap.min.css" type="text/css" >
    <script type="text/javascript" src="/js/jquery-3.3.1.min.js"></script>
    <script src="/js/bootstrap.min.js"></script>
    <title>分页查询</title>
</head>
<body>
<h1 class="text-center text-warning" style="margin-top: 10px;">用户列表</h1>

<table class="table table-hover table-bordered table-striped text-center" style="width: 70%; margin:auto; margin-top: 30px;">
    <thead>
    <tr>
        <th class="text-center">id</th>
        <th class="text-center">姓名</th>
        <th class="text-center">邮箱</th>
        <th class="text-center">密码</th>
        <th class="text-center">注册时间</th>
        <th class="text-center">操作</th>
    </tr>
    </thead>
    <tbody>
    <tr th:each="users:${users}">
        <td th:text="${users.id}"></td>
        <td th:text="${users.name}"></td>
        <td th:text="${users.email}"></td>
        <td th:text="${users.password}"></td>
        <td th:text="${#dates.format(users.time,'yyyy-MM-dd HH:mm')}"></td>
        <td>
            <button class="btn btn-primary btn-sm">修改</button>
            <button class="btn btn-danger btn-sm">删除</button>
        </td>
    </tr>

    </tbody>

</table>
<nav aria-label="Page navigation" class="text-center">

    <ul class="pagination" id="page">

    </ul>

</nav>
<div class="text-center">
    <span>当前页数: <strong>[[${pageNum}]]</strong></span>&nbsp;&nbsp;
    <span>总页数: <strong>[[${pageSum}]]</strong></span>&nbsp;&nbsp;
    <span>总数据: <strong>[[${sum}]]</strong></span>
</div>

<script>
    $(function () {
        //当前页数
        var pageNum='[[${pageNum}]]';
        //总数据
        var sum='[[${sum}]]';
        //总页数
        var pageCount='[[${pageSum}]]';
        if(pageNum==1){
            $("#page").append("<li><a href='/user/findUser?pageNum=1' style='cursor:pointer;pointer-events: none'>&laquo;</a></li>");
        }else{
            $("#page").append("<li><a href='/user/findUser?pageNum="+(pageNum-1)+"'>&laquo;</a></li>");

        }
        //每页显示8条数据,ym表示页数
        var ym =Math.floor((pageNum-1)/8)*8;
        //分页栏只展示4页的内容,页数大于4则进行下一页
        for(var i=1;i<5;i++){
            ym = ym+i;

            if(pageNum<4){
                //发送的请求
                var url='/user/findUser?pageNum='+ym;
                //发亮设置
                if(ym==pageNum){

                    $("#page").append("<li class='active'><a href='"+url+"'>"+ym+"</a></li>");
                }
                else{
                    $("#page").append("<li><a href='"+url+"'>"+ym+"</a></li>");
                }
            }
            else{
                //设置页码数值
                ym+=pageNum-4;
                //发送的请求
                var url='/user/findUser?pageNum='+ym;
                //发亮设置
                if(ym==pageNum){

                    $("#page").append("<li class='active'><a href='"+url+"'>"+ym+"</a></li>");
                }
                else{
                    $("#page").append("<li><a href='"+url+"'>"+ym+"</a></li>");
                }
            }
            //初始化
            ym =Math.floor((pageNum-1)/8)*8;
        }
        //如果是最后一页,则禁用下一页的连接

        if(pageNum==pageCount){//pageCount表示总页数,也表示最大页数(最后一页)
            //禁用链接
            $("#page").append("<li><a href='#' style='cursor:pointer;pointer-events: none'>&raquo;</a></li>");
        }else{
            pageNum++;
            $("#page").append("<li><a href='/user/findUser?pageNum="+pageNum+"' >&raquo;</a></li>");
        }
    });

</script>
</body>
</html>

简单的分页功能就这样实现了,喜欢的话记得关注我哦!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

springboot+bootstrap实现分页 的相关文章

  • 打印星号的 ASCII 菱形

    我的程序打印出这样的钻石 但只有当参数或菱形的每一面为4 例如如果我输入6 底部三角形的间距是错误的 我一直在试图找出答案 当参数改变时 底部的三角形不会改变 只有顶部的三角形会改变 它只适用于输入4 public static void
  • 是否可以使用 Flying Saucer (XHTML-Renderer) 将 css 解析为类路径资源?

    我正在尝试将资源打包到 jar 中 但我无法让 Flying Saucer 在类路径上找到 css 我无法轻松构建 URL 来无缝解决此问题 https stackoverflow com questions 861500 url to l
  • Kotlin 未解决的参考:CLI 上 gradle 的 println

    放一个printlnkotlin 函数返回之前的语句会崩溃 堆栈跟踪 thufir dur NetBeansProjects kotlin thufir dur NetBeansProjects kotlin gradle clean bu
  • Spring Security SAML2 使用 G Suite 作为 Idp

    我正在尝试使用 Spring Security 5 3 3 RELEASE 来处理 Spring Boot 应用程序中的 SAML2 身份验证 Spring Boot 应用程序将成为 SP G Suite 将成为 IDP 在我的 Maven
  • 合并来自多个 spring-boot YAML 文件的列表

    是否可以组合使用 YAML 编写的多个 spring boot 配置文件中相同元素的列表 Example postgres yml包含我的 postgres 数据库信息 它还包含我的迁移脚本的飞行路径位置 flyway locations
  • 生成的序列以 1 开头,而不是注释中设置的 1000

    我想请求一些有关 Hibernate 创建的数据库序列的帮助 我有这个注释 下面的代码 在我的实体类中 以便为合作伙伴表提供单独的序列 我希望序列以 1000 开头 因为我在部署期间使用 import sql 将测试数据插入数据库 并且我希
  • 从 GitHub 上托管的 Spring Cloud Config Server 访问存储库的身份验证问题

    我在 GitHub 上的存储库中托管配置 如果我将回购公开 一切都好 但如果我将其设为私有 我将面临 org eclipse jgit errors TransportException https github com my user m
  • 在另一个模块中使用自定义 gradle 插件模块

    我正在开发一个自定义插件 我希望能够在稍后阶段将其部署到存储库 因此我为其创建了一个独立的模块 在对其进行任何正式的 TDD 之前 我想手动进行某些探索性测试 因此 我创建了一个使用给定插件的演示模块 到目前为止 我发现执行此操作的唯一方法
  • Java:如何为山区时间创建 TimeZone 对象?

    必须不禁用夏令时 嗯 在这个清单 http en wikipedia org wiki List of tz database time zones在 zoneinfo 时区名称中 有很多声称是 山地时间 找到最适合您想要的那个 然后使用它
  • 了解joda时间PeriodFormatter

    我以为我明白了 但显然我不明白 你能帮我通过这些单元测试吗 Test public void second assertEquals 00 00 01 OurDateTimeFormatter format 1000 Test public
  • 流中的非终结符 forEach() ?

    有时 在处理 Java Stream 时 我发现自己需要一个非终端 forEach 来触发副作用但不终止处理 我怀疑我可以用 map item gt f item 之类的方法来做到这一点 其中方法 f 执行副作用并将项目返回到流中 但这似乎
  • QuerySyntaxException:无法找到类

    我正在使用 hql 生成 JunctionManagementListDto 类的实际 Java 对象 但我最终在控制台上出现以下异常 org hibernate hql internal ast QuerySyntaxException
  • JMenu 中的文本居中

    好吧 我一直在网上寻找有关此问题的帮助 但我尝试的任何方法似乎都不起作用 我想让所有菜单文本都集中在菜单按钮上 当我使用setHorizontalTextPosition JMenu CENTER 没有变化 事实上 无论我使用什么常量 菜单
  • “无法实例化活动”错误

    我的一个 Android 应用程序拥有大约 100 000 个用户 每周大约 10 次 我会通过 Google 的市场工具向我报告以下异常情况 java lang RuntimeException Unable to instantiate
  • Spring-ws:如何从没有“Request”元素的 xsd 创建 Wsdl

    尝试为客户端实现 SOAP Web 服务 我需要一个 wsdl 文件来通过soapUI 测试该服务 但正如您在下面看到的 这个 xsd 没有 Request 和 Response 方法 所有请求和响应都被定义为基本 ServiceProvi
  • Android:无法发送http post

    我一直在绞尽脑汁试图弄清楚如何在 Android 中发送 post 方法 这就是我的代码的样子 public class HomeActivity extends Activity implements OnClickListener pr
  • 配置“DataSource”以使用 SSL/TLS 加密连接到 Digital Ocean 上的托管 Postgres 服务器

    我正在尝试托管数据库服务 https www digitalocean com products managed databases on 数字海洋网 https en wikipedia org wiki DigitalOcean 创建了
  • 洪水填充优化:尝试使用队列

    我正在尝试创建一种填充方法 该方法采用用户指定的初始坐标 检查字符 然后根据需要更改它 这样做之后 它会检查相邻的方块并重复该过程 经过一番研究 我遇到了洪水填充算法并尝试了该算法 它可以工作 但无法满足我对 250 x 250 个字符的数
  • Java EE 目录结构

    我对以下教程有疑问 http www mkyong com jsf2 jsf 2 internationalization example http www mkyong com jsf2 jsf 2 internationalizatio
  • Spring表单ModelAttribute字段验证避免400 Bad Request错误

    我有一个ArticleFormModel包含正常发送的数据html form由 Spring 使用注入 ModelAttribute注释 即 RequestMapping value edit method RequestMethod PO

随机推荐

  • Chrome浏览器禁用更新

    操作步骤 我的电脑 进入目录 C Windows System32 drivers etc 修改hosts文件 在末尾添加 127 0 0 1 update googleapis com 保存并退出 按win r 快捷键 输入cmd打开命令
  • spring-mvc的重定向和转发

    重定向和转发 servlet的方法 Controller public class ResultGo 在页面上打印 RequestMapping result t1 public void test1 HttpServletRequest
  • 终于弄懂tf.reduce_sum()函数和tf.reduce_mean()函数

    参考博客 1 https www zhihu com question 51325408 answer 125426642 2 https www w3cschool cn tensorflow python tensorflow pyth
  • typescript 提示 Object is possibly null

    Object is possibly null 对象可能是null 分析 localStorage getItem SET HISTORY KEY 这个值有可能为空 所以再执行getItem就会报错此刻对象可能为空 解决 联合类型 把nul
  • linux单进程最大内存,限制单个Linux进程的内存使用量

    我正在运行pdftoppm将用户提供的PDF转换为300DPI图像 这非常有用 除非用户提供的页面大小非常大 pdftoppm将分配足够的内存来在内存中保存该大小的300DPI图像 对于100英寸的方形页面 每像素100 300 100 3
  • 关于Postman无法显示中文的解决方案(翻译)

    在使用Postman时很多人因为界面是纯英文的感到很头疼 会面临不知道什么意思及界面看不懂的情况 于是出现了需要将界面汉化翻译过来的需求 但从实际工作经验来讲 个人还是比较喜欢看英文界面的 可能也是看习惯了导致的吧 本文以两种方式帮助读者理
  • FPGA虚拟时钟约束详解

    FPGA虚拟时钟约束详解 在FPGA设计中 时钟是一个至关重要的因素 为了确保时序分析的准确性 并满足特定应用对时钟精度的要求 我们需要通过时钟约束来对FPGA设计进行优化和配置 本文将详细介绍FPGA虚拟时钟约束的原理与实现方法 一 什么
  • 2023,软件测试人的未来在哪里?

    2023年 IT行业出现空前的萧条 首先是年初一开始各大厂像着了魔似的不约而同的纷纷裁员 降薪 奖金包缩水 随之而来的是需求萎缩 HC减少或封锁等等 而有幸未被列入裁员名单的在职人员 庆幸之余也心有余悸 伴随着恐慌 说不定哪天裁员就轮到了自
  • Cocos2d C++与lua互相调用

    参考文章 cocos2dx之Lua调用C 与 cocos2dx之C 调用Lua 感谢 乐逍遥Jun的参考 我是用的是 3 13版本 创建一个 lua版本的工程 我的工程名称是 TestLua 一 lua 调用c 1 编写一个 ini文件 路
  • 自驱力超强的羊驼?斯坦福微调LLaMa

    大型 指令调优 语言模型在新任务上展现了Zero shot的卓越能力 但严重依赖于人类编写的指令数据 而这些数据在数量 多样性和创造性方面都是有限的 斯坦福科研人员引入了self instruction框架 提高指令遵循能力来自我迭代进化
  • 利用MATLAB做一维CNN分类 问题及解决方法

    利用MATLAB做一维数据的CNN分类 问题及解决方法 我在做一维CNN分类时参考了知乎凉拌西红柿答主的程序示例 根据其代码改编实现了CNN分类 其中遇到的问题与解决方法总结如下 1 数据维度转换问题 for i 1 1 3000 for
  • python字符识别_crnn(基于pytorch、python3) 实现不定长中文字符识别

    在六七月份参加了一个比赛 做的项目是提取图片中的文字信息 首先是接触了一些文本检测算法 如CTPN East 后研究了文本识别算法 我认为较好的是CRNN 代码实现是参考算法提出者的pytorch python3版本的crnn实现 因为py
  • Oracle 删除命令详解

    Oracle 删除表方式分为三种 第一种 drop 命令 drop table 表名 实战 drop table erms biz accep management drop table ERMS BIZ ARCH COMPANY SPEC
  • @WebServlet注解(Servlet注解)

    WebServlet注解 文章目录 WebServlet注解 前言 一 WebServlet 注解的属性 二 WebServlet 注解的使用 1 启用注解支持 2 使用 WebServlet 注解 WebServlet 注解 和 web
  • 香港政府活用无人机,正式应用到调研检测领域

    香港机电工程署正式用无人机来完成燃气管道的监测工作 完整的数据库将能帮助工程师识别高危煤气管道 近些年来 无人机的使用已经日趋广泛 逐步被应用到各个领域 近日 香港机电工程署目前正在利用无人机来检测燃气管道 香港电机工程署所采用的无人机有摄
  • python日志记录

    日志记录 日志 排错 程序调试 用户行为分析 python logging模块 日志等级 日志等级 数值表示 描述 DEBUG 10 最详细的日志 常用于调试 INFO 20 详细日志 记录关键节点 WARNING 30 当前有不期望的事情
  • 你真的了解宏 MIN(X,Y)吗?

    微信搜索 编程笔记本 微信搜索 编程笔记本 微信搜索 编程笔记本 点击上方蓝字关注我 我们一起学编程 欢迎小伙伴们分享 转载 私信 赞赏 今天来研究一个看似简单 实则不那么简单的问题 定义一个求两数较小值的宏 下面我将以百分制的方式为各种写
  • 是刁难?还是装B?字节面试每轮必问的算法题到底意义何在?

    最近在脉脉上看到有一个Android工程师吐槽 自己明明有着BAT的5年工作经验 却没想到在应聘Hulu时 败在了算法题上 明明有多年大厂工作经验 为什么还要在找工作跳槽时 面对算法的考题 这个话题 已经引发了不少人的关注 其中有人强烈支持
  • 软件测试基础

    什么是软件 程序 文档 服务 数据 什么是软件测试 尽快尽早的发现中软件存在错误 贯穿整个软件生命周期的确定和验证的过程 项目流程 需求分析 概要设计 详细设计 编码 测试 验收 项目的开发模型 瀑布模型 优点 规范了项目的流程 缺点 测试
  • springboot+bootstrap实现分页

    写在前面 你们好 我是小庄 很高兴能和你们一起学习SpringBoot和bootstrap 如果您对Java感兴趣的话可关注我的动态 写博文是一种习惯 在这过程中能够梳理和巩固知识 一 技术介绍 用到的技术 spring boot boot