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日

相关文章

  • MySQL定时任务(EVENT事件)如何配置详解

    MySQL定时任务(EVENT事件)可用于定期执行某些数据库操作。下面是配置MySQL定时任务(EVENT事件)的详细攻略。 步骤一:开启事件计划器 在MySQL中,事件计划器默认处于关闭状态。要开启事件计划器,请在MySQL客户端执行以下查询语句: SET GLOBAL event_scheduler=ON; 步骤二:创建事件 要创建事件,请使用以下语法:…

    database 2023年5月22日
    00
  • linux中把.c的文件编译成.so文件

    实现将.c文件编译成.so文件的过程可以分为以下几步: 编写C文件使用文本编辑器或者集成开发环境编写一个C程序代码文件,后缀为.c。该C文件可以包含定义函数、结构体、变量等内容。 编译生成目标文件使用gcc命令将C文件编译生成目标文件,即.o文件,可使用如下命令: gcc -fPIC -c example.c -o example.o 其中,-c选项表示仅进…

    database 2023年5月22日
    00
  • Docker的MySQL容器时区问题修改

    针对这个问题,我的解决方案如下: 1. 查看MySQL容器的默认时区 首先我们需要确认MySQL容器的默认时区,可以通过以下步骤查看: 进入MySQL容器 docker exec -it mysql_container_name bash 这里的mysql_container_name为你创建的MySQL容器的名称,如果不知道可以通过docker ps命令查…

    database 2023年5月22日
    00
  • docker安装redis并连接

    1.拉取 docker pull redis 2.运行容器 docker run -itd –name redis-test -p 6389:6379 redis –name redis :将运行的容器命名为redis -p 6379:6379 :将本地的6389端口映射到容器的6379端口 3.运行redis服务  进入容器 docker exec -…

    Redis 2023年4月13日
    00
  • SQL 计算中位数

    SQL 计算中位数 中位数是指将一组数据按从小到大(或从大到小)的顺序排列,位于中间位置的数值,即能将该组数据均分成两部分的数值。 通常有两种方式计算中位数: 对于数量为奇数的数据,中位数就是中间那个数; 对于数量为偶数的数据,中位数是中间两个数的平均值。 以下是SQL计算中位数的攻略: 方法一:使用SQL函数计算中位数 SQL函数包含一些针对特定数据类型的…

    database 2023年3月27日
    00
  • Oracle如何查看impdp正在执行的内容

    查看正在执行的import进度 可以通过查询v$session_longops视图来查看正在执行的impdp进度。 具体操作步骤如下: 首先,打开Oracle客户端,使用sqlplus连接到Oracle数据库。 然后,执行以下SQL脚本: SELECT sid, opname, target, sofar, totalwork, units, elapsed…

    database 2023年5月22日
    00
  • linux数据库备份并通过ftp上传脚本分享

    下面是关于“Linux数据库备份并通过FTP上传脚本分享”的完整攻略。 前置条件 在进行以下操作之前,请确保已经: 安装 MySQL 数据库 熟悉 MySQL 命令行操作 安装了 FTP 工具,比如 lftp 步骤一:编写备份脚本 下面是针对 MySQL 数据库编写备份脚本的示例代码: #!/bin/bash # 设置数据库参数 DB_HOST=localh…

    database 2023年5月22日
    00
  • jsp+servlet+javabean实现数据分页方法完整实例

    jsp+servlet+javabean实现数据分页方法完整实例攻略 前言 数据分页是Web开发中常见的功能需求之一。在Java Web应用开发中,使用jsp+servlet+javabean组合实现数据分页功能是常见的方式。本攻略将详细介绍如何使用jsp、servlet、javabean实现数据分页功能。完整示例实现代码可在GitHub代码库中查看。 前置…

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