spring data jpa分页查询示例代码

下面是 Spring Data JPA 分页查询示例代码的详细攻略。

1. 整体思路

Spring Data JPA 分页查询主要涉及到以下几个方面的内容:

  1. 数据库表的建立
  2. 实体类的定义和映射
  3. Spring Data JPA 的依赖导入
  4. DAO 接口和实现类的定义
  5. 分页查询方法的定义和实现
  6. 控制器方法的编写

其中,数据库表的建立和实体类的定义和映射这两个方面在此不做过多讲解,重点介绍后面几个方面的内容。

2. Spring Data JPA 的依赖导入

首先需要在项目的 pom.xml 文件中添加 Spring Data JPA 的依赖,示例代码如下:

<!-- Spring Data JPA 依赖 -->
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-jpa</artifactId>
    <version>2.0.9.RELEASE</version>
</dependency>

3. DAO 接口和实现类的定义

接下来,需要定义 DAO 接口和实现类。DAO 接口中定义分页查询方法的签名,具体的实现则交给实现类来完成。示例代码如下:

public interface UserRepository extends JpaRepository<User, Long> {

    /**
     * 分页查询用户信息
     *
     * @param pageable 分页信息
     * @return 用户信息列表
     */
    Page<User> findAll(Pageable pageable);

}
@Repository
public class UserRepositoryImpl implements UserRepositoryCustom {

    @Autowired
    private EntityManager entityManager;

    @Override
    public Page<User> findUserByPage(Pageable pageable) {
        String hql = "FROM User";
        Query query = entityManager.createQuery(hql);
        query.setFirstResult((pageable.getPageNumber() - 1) * pageable.getPageSize());
        query.setMaxResults(pageable.getPageSize());
        List<User> list = query.getResultList();
        int total = entityManager.createQuery("SELECT COUNT(*) FROM User").getSingleResult().intValue();
        return new PageImpl<>(list, pageable, total);
    }

}

需要注意的是,分页查询方法的返回值类型为 Page 类型,其中包含分页信息和查询结果。

4. 分页查询方法的定义和实现

在 DAO 接口中定义了分页查询方法后,需要在实现类中具体实现。

可以使用 entityManager 自己写 hql 语句进行查询,也可以直接使用 Spring Data JPA 提供的方法来实现。下面分别给出两个示例代码。

使用 entityManager 实现分页查询方法

@Override
public Page<User> findUserByPage(Pageable pageable) {
    String hql = "FROM User";
    Query query = entityManager.createQuery(hql);
    query.setFirstResult((pageable.getPageNumber() - 1) * pageable.getPageSize());
    query.setMaxResults(pageable.getPageSize());
    List<User> list = query.getResultList();
    int total = entityManager.createQuery("SELECT COUNT(*) FROM User").getSingleResult().intValue();
    return new PageImpl<>(list, pageable, total);
}

使用 Spring Data JPA 提供的方法实现分页查询

@Override
public Page<User> findAll(Pageable pageable) {
    return userRepository.findAll(pageable);
}

5. 控制器方法的编写

最后,在控制器中定义分页查询方法的映射,并实现具体操作。示例代码如下:

@GetMapping("/users")
public String list(Model model, @RequestParam(value = "page", defaultValue = "1") Integer pageNum,
                   @RequestParam(value = "size", defaultValue = "5") Integer pageSize) {
    Pageable pageable = PageRequest.of(pageNum - 1, pageSize);
    Page<User> page = userRepository.findAll(pageable);
    model.addAttribute("page", page);
    return "user/list";
}

其中,PageRequest 是 Spring Data JPA 中提供的分页请求实体类,通过它可以设置分页查询的页码和每页大小。在控制器方法中得到分页请求实例后,调用 DAO 中定义的分页查询方法,得到分页查询结果后,将其添加到模型参数中,最后返回视图页面进行展示。

6. 示例代码

综上所述,下面给出 Spring Data JPA 分页查询示例代码:

【示例一】使用 entityManager 实现分页查询方法

UserRepository.java

public interface UserRepository extends JpaRepository<User, Long> {

    /**
     * 分页查询用户信息
     *
     * @param pageable 分页信息
     * @return 用户信息列表
     */
    Page<User> findAll(Pageable pageable);

}

UserRepositoryImpl.java

@Repository
public class UserRepositoryImpl implements UserRepositoryCustom {

    @Autowired
    private EntityManager entityManager;

    @Override
    public Page<User> findUserByPage(Pageable pageable) {
        String hql = "FROM User";
        Query query = entityManager.createQuery(hql);
        query.setFirstResult((pageable.getPageNumber() - 1) * pageable.getPageSize());
        query.setMaxResults(pageable.getPageSize());
        List<User> list = query.getResultList();
        int total = entityManager.createQuery("SELECT COUNT(*) FROM User").getSingleResult().intValue();
        return new PageImpl<>(list, pageable, total);
    }

}

【示例二】使用 Spring Data JPA 提供的方法实现分页查询

UserRepository.java

public interface UserRepository extends JpaRepository<User, Long> {

    /**
     * 分页查询用户信息
     *
     * @param pageable 分页信息
     * @return 用户信息列表
     */
    Page<User> findAll(Pageable pageable);

}

控制器方法

@GetMapping("/users")
public String list(Model model, @RequestParam(value = "page", defaultValue = "1") Integer pageNum,
                   @RequestParam(value = "size", defaultValue = "5") Integer pageSize) {
    Pageable pageable = PageRequest.of(pageNum - 1, pageSize);
    Page<User> page = userRepository.findAll(pageable);
    model.addAttribute("page", page);
    return "user/list";
}

以上就是关于 Spring Data JPA 分页查询示例代码的详细攻略。希望能对您有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:spring data jpa分页查询示例代码 - Python技术站

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

相关文章

  • java打印正弦曲线示例

    下面我会详细讲解Java打印正弦曲线示例的完整攻略,请耐心阅读。 Java打印正弦曲线示例 简介 本文将介绍使用Java打印正弦曲线的过程,并附上代码示例和详细说明。正弦曲线是一种常见的数学曲线,它可以通过一系列的正弦函数值计算得出并绘制出曲线。 准备工作 在开始正弦曲线的绘制之前,需要先准备好Java开发环境。安装好JDK并配置好环境变量后,打开编辑器开始…

    Java 2023年5月26日
    00
  • Go Java算法之简化路径实例详解

    Go Java算法之简化路径实例详解 本篇文章将详细讲解如何使用Go和Java算法来简化路径。首先,我们需要了解路径简化的定义和目的。 什么是路径简化? 路径简化是将路径中冗余的部分删除,使其变得更短、更干净、更易读。例如,路径”/a/b/c/../d”可以简化为”/a/b/d”。这不仅可以节省存储空间,还可以提高代码的效率。 路径简化的目的 路径简化有多种…

    Java 2023年5月19日
    00
  • Java SpringBoot使用guava过滤器

    Java SpringBoot使用Guava过滤器攻略 在Java SpringBoot中使用Guava库来实现过滤器可以非常方便地对数据进行过滤和转换。以下是实现该功能的完整攻略: 第一步:添加Maven依赖 在pom.xml文件中添加以下依赖: <dependencies> <dependency> <groupId>…

    Java 2023年5月19日
    00
  • Spring源码系列(补充):详解ApplicationContext

    前言 在之前的文章中,我们已经对Spring源码中的一些核心概念进行了分析。由于篇幅限制,我们并没有详细解释ApplicationContext类所继承的父接口及其作用。因此,本文将单独为ApplicationContext进行详细说明,包括其继承的父接口及其作用。 ApplicationContext父接口 MessageSource 大家应该都比较熟悉M…

    Java 2023年4月22日
    00
  • SpringMVC学习之JSON和全局异常处理详解

    SpringMVC学习之JSON和全局异常处理详解 JSON 什么是JSON JSON是一种轻量级的数据交换格式,它的设计是为了易于阅读和编写。JSON是基于JavaScript的一个子集,可以用于表示简单的数据结构和对象,常用于Web前端和服务器之间的数据传输。 在SpringMVC中使用JSON SpringMVC内置了MappingJackson2Ht…

    Java 2023年5月26日
    00
  • 详解微信小程序开发用户授权登陆

    详解微信小程序开发用户授权登陆 微信小程序开发用户授权登陆是小程序中常见的功能之一,允许用户授权登录并获取用户信息。本攻略将详细介绍如何实现微信小程序用户授权登录,并提供示例代码供参考。 1. 开发者配置 在微信公众平台中注册小程序,并在开发者工具中创建小程序项目。在小程序管理后台中,开启“用户信息”权限,同时设置授权回调页面路径。 2. 获取用户权限 在小…

    Java 2023年5月30日
    00
  • 教你正确的Java扩展方法示例详解

    您好,感谢您对“教你正确的Java扩展方法示例详解”的关注。这篇文章旨在教给Java开发者如何正确地编写扩展方法,并提供了示例来帮助读者更好地理解。 什么是扩展方法 在Java中,扩展方法指的是在已有类中添加新的方法而不改变原有类的代码。这种方法使用起来非常方便,可以为已有的类添加额外的功能。 编写扩展方法的步骤 编写扩展方法的步骤分为以下几个: 创建一个类…

    Java 2023年5月26日
    00
  • 利用Maven添加工程版本信息及时间戳

    我很乐意为您提供“利用Maven添加工程版本信息及时间戳”的完整攻略。 1. 添加Maven插件到POM文件中 在POM文件中添加Maven插件来管理版本信息。首先,您需要打开POM文件,然后再<build>标签中添加以下代码片段: <plugins> <plugin> <groupId>org.apache.…

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