Java实现分页查询功能

yizhihongxing

下面是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日

相关文章

  • docker配置openGauss数据库的方法详解

    让我来详细讲解“docker配置openGauss数据库的方法详解”。 1. 确定配置环境 首先,我们需要安装好Docker环境,包括Docker Engine和Docker Compose。 其次,我们需要下载openGauss的数据库镜像,可以通过以下命令快速获取: docker pull opensourcepostgres/opengauss:lat…

    database 2023年5月22日
    00
  • Linux下安装mysql 5.7.17.tar.gz的教程详解

    Linux下安装mysql 5.7.17.tar.gz的教程详解 准备工作 下载MySQL 5.7.17版本的压缩包(mysql-5.7.17.tar.gz)。 安装cmake和make工具。 sudo apt-get install cmake make 安装依赖库 sudo apt-get install build-essential libncurs…

    database 2023年5月22日
    00
  • Oracle 与 SQL Server的区别

    Oracle和SQL Server都是目前最流行的关系型数据库管理系统,它们在处理数据、数据存储、性能优化等方面具有很多相似之处,但也有很多明显的区别。以下是Oracle和SQL Server的区别的详细讲解。 1. 数据库管理系统 Oracle和SQL Server都是关系型数据库管理系统(RDBMS),但它们的结构和架构方式略有不同。Oracle数据库是…

    database 2023年3月27日
    00
  • mysql自动化安装脚本(ubuntu and centos64)

    MySQL自动化安装脚本是一个用于在Ubuntu和CentOS64操作系统上自动安装MySQL的脚本程序。下面是完整的MySQL自动化安装攻略: 前置需求 在运行MySQL自动化安装脚本前,你需要具备以下要求: 使用Ubuntu或CentOS64操作系统。 系统用户需要具备sudo权限。 访问MySQL安装源需要互联网连接。 安装步骤 步骤 1 – 下载安装…

    database 2023年5月22日
    00
  • 记录服务器rm -rf误删文件的恢复过程

    以下是详细的“记录服务器 rm -rf 误删文件的恢复过程”的攻略: 背景 当我们使用 rm -rf 命令删除文件或目录时,有时会误删一些重要的文件。如果没有备份,那么数据就可能永久丢失。但是,在一些情况下,我们可以通过一些技术手段来找回这些文件。 恢复过程 停止对硬盘的写入 当发现误删文件时,要立即停止对硬盘的写入,避免新数据写入到被误删的文件占用原来的空…

    database 2023年5月21日
    00
  • SQL SERVER 里的错误处理(try catch)

    SQL SERVER 中的错误处理机制基于 TRY…CATCH 块,可用于处理 SQL Server 数据库中遇到的错误和异常。TRY…CATCH 语句块允许开发人员在代码中捕获和处理错误,以便让程序更加健壮、容错、友好。 下面是基于 TRY…CATCH 捕获和处理 SQL SERVER 错误的完整攻略,包含以下步骤: 步骤 1:开始一个 TRY…

    database 2023年5月21日
    00
  • SQL Server数据库的三种创建方法汇总

    SQL Server是一种常用的关系型数据库管理系统(DBMS),用于数据的存储、管理和查询等操作。在使用SQL Server时,最基本的操作之一就是创建一个数据库。SQL Server的三种创建方法汇总如下: 1. 使用SQL Server Management Studio(SSMS)创建数据库 打开SQL Server Management Studi…

    database 2023年5月21日
    00
  • 详解sql中的参照完整性(一对一,一对多,多对多)

    SQL中的参照完整性是指关系型数据库中保证数据完整性的一种机制。它通过定义一些规则来确保在关系数据库中的数据的完整性和一致性。参照完整性的目的是确保表之间的数据一致性和正确性,从而保证数据库中的数据能够满足特定的业务需求,减少数据错误和冗余。下面将讲解SQL中的参照完整性,具体分为一对一、一对多和多对多。 一对一关系 在一对一关系中,一个表的每一行都对应着另…

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