下面我会给出 Spring Data JPA 实现查询分页 Demo 的详细攻略。
1. 添加依赖
在项目的 pom.xml 文件中添加 Spring Data JPA 依赖:
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>2.5.3</version>
</dependency>
同时,为了方便开发,我们也可以添加 PageHelper 分页插件的依赖:
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
2. 配置 JPA
在 Spring Boot 项目中,我们可以使用 application.properties 或 application.yml 文件配置数据库信息,例如:
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
username: root
password: 123456
jpa:
properties:
hibernate:
dialect: org.hibernate.dialect.MySQL8Dialect
naming:
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
show-sql: true
hibernate:
ddl-auto: none
database-platform: ${spring.jpa.properties.hibernate.dialect}
然后在项目中创建对应的 Entity 类和 Repository 接口:
@Entity
@Table(name = "user")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class UserEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
}
public interface UserRepository extends JpaRepository<UserEntity, Long> {
}
3. 编写代码
接下来,我们就可以编写代码实现分页查询了。这里以一个简单的 UserService 类作为例子:
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public List<UserEntity> findAll(int pageNum, int pageSize) {
// 设置分页参数
PageHelper.startPage(pageNum, pageSize);
// 查询数据
List<UserEntity> users = userRepository.findAll();
// 返回分页结果
PageInfo<UserEntity> pageInfo = new PageInfo<>(users);
return pageInfo.getList();
}
}
上述代码中,我们通过 PageHelper.startPage(...)
方法来设置分页参数,然后通过 userRepository.findAll()
方法来查询数据,并将查询结果通过 PageInfo
对象封装成分页格式后返回。
4. 示例展示
下面展示两个示例。
示例1:使用 Postman 测试
如果你已经完成了前面所有步骤,那么你可以使用 Postman 这个强大的 API 开发工具来测试你的分页查询 API 。在 Postman 中,你可以使用 GET 请求访问你的 API 地址:
http://localhost:8080/api/users?pageNum=1&pageSize=10
其中,pageNum
表示当前页数,pageSize
表示每页显示的数据量。你可以根据需求调整这两个参数的值。
示例2:在 Thymeleaf 中使用
如果你想在 Thymeleaf 视图中使用分页查询,在你的 Controller 中添加如下代码:
@RequestMapping("/users")
public String getUsers(@RequestParam(defaultValue = "1") int pageNum,
@RequestParam(defaultValue = "10") int pageSize,
Model model) {
// 查询数据
List<UserEntity> users = userService.findAll(pageNum, pageSize);
// 将数据和分页参数存入 Model 中
PageInfo<UserEntity> pageInfo = new PageInfo<>(users);
model.addAttribute("users", pageInfo.getList());
model.addAttribute("pageInfo", pageInfo);
// 渲染视图
return "users";
}
然后在你的 users.html 文件中添加如下代码:
<div th:each="user : ${users}">
<div th:text="${user.name}"></div>
</div>
<div th:if="${pageInfo.pages>1}">
<ul>
<li th:class="${pageInfo.hasPreviousPage} ? 'disabled' : ''">
<a th:href="${pageInfo.hasPreviousPage()} ? @{${#httpServletRequest.requestURI}}?pageNum=${pageInfo.prePage}&pageSize=${pageInfo.pageSize}">«</a>
</li>
<li th:each="page : ${pageInfo.navigatepageNums}" th:class="${page.current} ? 'active' : ''">
<a th:href="@{${#httpServletRequest.requestURI}}?pageNum=${page}">${page}</a>
</li>
<li th:class="${pageInfo.hasNextPage} ? 'disabled' : ''">
<a th:href="${pageInfo.hasNextPage()} ? @{${#httpServletRequest.requestURI}}?pageNum=${pageInfo.nextPage}&pageSize=${pageInfo.pageSize}">»</a>
</li>
</ul>
</div>
其中,users
是前面 Controller 中注入的数据列表。pageInfo
是一个分页对象,包含了当前页数、每页显示的数据量、总记录数、总页数等分页参数。我们使用 Thymeleaf 的 th:each
循环列表,并在分页列表中展示对应的页码。
以上就是 Spring Data JPA 实现查询分页 Demo 的完整攻略,希望对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringData JPA实现查询分页demo - Python技术站