Java实现分页查询功能

下面是Java实现分页查询功能的完整攻略。

一、分页查询功能说明

分页查询功能是指在查询数据时,将要查询的数据分批返回给用户,每一批数据的大小为一页(page size),以此来减少查询时间和网络传输数据量。分页查询功能在实际开发中很常用,因此在Java中实现这个功能也非常重要。

二、Java实现分页查询功能的步骤

  1. 获取数据总量

在执行分页查询之前,需要先获取总数据量。可以从数据库中获取,或者从接口中获取。获取总数据量后,可以根据每页数据大小和总数据量计算出总页数。

  1. 实现查询方法

查询方法需要传入当前页数和每一页的数据量。可以使用SQL语句中的limit关键字来实现分页查询:

public List<User> findUsers(int currentPage, int pageSize) {
    String sql = "SELECT * FROM users LIMIT ?, ?";
    int start = (currentPage - 1) * pageSize;
    List<User> users = jdbcTemplate.query(sql, new Object[]{start, pageSize}, new UserRowMapper());
    return users;
}

其中 currentPage 是当前页数,pageSize 是每一页的数据量。UserRowMapper 是一个实现了 RowMapper 接口的类,用于将查询结果转换为 User 对象。

  1. 实现分页控制器

分页控制器是指一个可以接收用户请求,并返回符合用户请求的数据的控制器。可以使用 Spring MVC 中的 @RequestMapping 注解将请求映射到这个控制器。

@RequestMapping(value = "/users", method = RequestMethod.GET)
public ModelAndView getUsers(@RequestParam int page) {
    ModelAndView modelAndView = new ModelAndView("users");
    int pageSize = 10;
    int totalRows = userDao.count();
    int totalPages = (int) Math.ceil((double) totalRows / pageSize);
    List<User> users = userDao.findUsers(page, pageSize);
    modelAndView.addObject("users", users);
    modelAndView.addObject("currentPage", page);
    modelAndView.addObject("totalPages", totalPages);
    return modelAndView;
}

在这个方法中,使用 @RequestParam 注解从请求中获取 page 参数,然后调用 count 方法获取总数据量,再根据当前页数和每页数据量调用 findUsers 方法查询符合条件的数据。最后将查询结果和分页信息保存到 ModelAndView 对象中,并返回给用户。

三、示例说明

下面是使用Spring Boot和Thymeleaf模板引擎实现分页查询功能的例子。

  1. 创建一个Spring Boot项目,并添加依赖:
<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
  </dependency>
  <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
  </dependency>
  <dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.2.13</version>
  </dependency>
</dependencies>
  1. 创建一个 UserController 控制器类,并添加 @RequestMapping 注解:
@Controller
public class UserController {

  @Autowired
  private UserService userService;

  @RequestMapping(value = "/users", method = RequestMethod.GET)
  public String getUsers(@RequestParam(defaultValue = "1") int page, Model model) {
    int pageSize = 10;
    List<User> users = userService.findUsers(page, pageSize);
    PageInfo<User> pageInfo = new PageInfo<>(users);
    model.addAttribute("users", users);
    model.addAttribute("pageInfo", pageInfo);
    return "users";
  }
}

在这个控制器中,从请求中获取 page 参数,调用 findUsers 方法查询数据,并使用 PageInfo 对象保存分页信息,最后将查询结果和分页信息保存到 Model 对象中,并返回到 users.html 模板中渲染。

  1. 在模板文件 users.html 中使用分页组件:
<!DOCTYPE html>
<html>
  <head>
    <title>分页查询演示</title>
  </head>
  <body>
    <table>
      <thead>
        <tr>
          <th>ID</th>
          <th>姓名</th>
          <th>邮箱</th>
        </tr>
      </thead>
      <tbody>
        <tr th:each="user : ${users}">
          <td th:text="${user.id}"></td>
          <td th:text="${user.name}"></td>
          <td th:text="${user.email}"></td>
        </tr>
      </tbody>
    </table>
    <div>
      <ul>
        <li th:class="${pageInfo.hasPreviousPage()} ? '' : 'disabled'">
          <a th:href="@{/(page=${pageInfo.pageNum-1})}">上一页</a>
        </li>
        <li th:each="pageNum : ${pageInfo.navigatepageNums}">
          <a th:href="@{/(page=${pageNum})}" th:text="${pageNum}"></a>
        </li>
        <li th:class="${pageInfo.hasNextPage()} ? '' : 'disabled'">
          <a th:href="@{/(page=${pageInfo.pageNum+1})}">下一页</a>
        </li>
      </ul>
    </div>
  </body>
</html>

在这个模板文件中,使用 th:each 命令在表格中展示查询结果,并使用 PageInfo 对象展示分页信息,使用 th:class 命令判断上一页和下一页是否可用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实现分页查询功能 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • SQL查询的底层运行原理深入分析

    SQL查询的底层运行原理深入分析 什么是SQL查询 SQL(Structured Query Language,结构化查询语言)是一种用于操作关系型数据库的编程语言,我们可以使用SQL语言进行数据增删改查等操作。SQL查询就是用SQL语言查询数据的过程。 SQL查询的底层运行原理 SQL查询的底层运行原理主要分为以下几个步骤: 语法分析与解析 当我们输入SQ…

    database 2023年5月19日
    00
  • Neo4j和PostgreSQL的区别

    Neo4j和PostgreSQL是两个常用的数据库,它们在一些方面有着很大的区别。下面我将详细讲解Neo4j和PostgreSQL的区别,包括它们的设计思想、适用场景和基本使用方式。 Neo4j和PostgreSQL的设计思想 Neo4j是一种基于图形结构的数据库,它的核心思想是节点和关系。节点是数据库中的基本单位,它可以代表人、地点、事件等等。关系则是节点…

    database 2023年3月27日
    00
  • Windows下redis下载、redis安装及使用教程

    Windows下Redis下载、Redis安装及使用教程 下载Redis 进入Redis官网:https://redis.io/ 点击Download选项卡,找到Windows版本的Redis软件,或者直接访问https://github.com/microsoftarchive/redis/releases 下载适合自己的版本。 下载对应的Redis压缩包…

    database 2023年5月22日
    00
  • MySQL(十四)分析查询语句Explain 七千字总结

    分析查询语句:EXPLAIN 1概述 ​ 定位了查询慢的SQL之后,就可以使用EXPLAIN或者DESCRIBE工具做针对性的分析查询。两者使用方法相同,并且分析结果也是相同的。 ​ MySQL中有专门负责SQL语句优化的优化器模块,主要功能是计算分析系统中收集到的统计信息,为客户端请求的Query提供它最优的执行计划(它认为的最优数据检索方案毕竟是自动分析…

    MySQL 2023年4月16日
    00
  • 浅谈sql数据库去重

    浅谈 SQL 数据库去重 在使用 SQL 数据库时,我们经常需要对数据进行去重操作。本文将介绍 SQL 数据库去重的完整攻略,同时提供两条示例说明。 去重操作条件 在进行去重操作时,需要确定去重的条件。一般情况下,去重的条件是某些字段的值相同,可以使用 GROUP BY 和 HAVING 子句实现。 使用 GROUP BY 进行去重 使用 GROUP BY …

    database 2023年5月21日
    00
  • 简单的ASP中经常用到的代码[推荐]

    简单的ASP中经常用到的代码 简介 ASP (Active Server Pages) 是一种可以动态生成HTML页面的服务器端脚本语言,常用于编写Web应用程序。在ASP的开发中,会用到一些常见的代码片段,下面将对这些代码片段进行详细讲解。 ASP程序的基本结构 在ASP程序中,通常会包含页面头部、页面主体和页面底部三个部分。 <!– #inclu…

    database 2023年5月21日
    00
  • 在linux命令下导出导入.sql文件的方法

    当需要备份或恢复MySQL数据库时,我们可以使用导出和导入SQL文件的方法来完成。在Linux命令行下,我们可以通过以下步骤来导出或导入SQL文件。 导出SQL文件 首先登录到MySQL服务器 bash mysql -u username -p 在提示符下输入密码。 选择需要导出的数据库 bash use database_name; 将 database_…

    database 2023年5月22日
    00
  • Oracle VM VirtualBox 安装CentOS7操作系统的教程图解

    首先,安装CentOS7操作系统前需要先安装Oracle VM VirtualBox,所以我们需要先下载并安装VirtualBox(因为下载和安装过程比较简单,这里就不赘述了,可以自行在搜索引擎中搜索相关教程)。 接下来,我们进入CentOS官网下载CentOS7的ISO镜像文件。下载完成后,在VirtualBox中创建一个新的虚拟机,按照下面的步骤进行设置…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部