本文介绍如何在 web 应用中实现“点击一次加载前一天数据,再点加载前两天数据”的交互逻辑,核心是将日期偏移量作为路径参数传递至后端,并结合 java 8 时间 api 精确查询对应日期的文档记录。
本文介绍如何在 web 应用中实现“点击一次加载前一天数据,再点加载前两天数据”的交互逻辑,核心是将日期偏移量作为路径参数传递至后端,并结合 java 8 时间 api 精确查询对应日期的文档记录。
在实际业务开发中,常需支持按时间维度动态翻页查看历史数据(如日报、审计日志等)。本教程以 Spring MVC + Hibernate 为例,详解如何实现「每次点击「Previous」按钮,查询距当前日期 N 天前的文档数据」这一需求。
Controller 层(支持任意偏移天数):
@RequestMapping(value = "/getPrevDay/{uztId}/{daysOffset}", method = RequestMethod.GET)@ResponseBody@ResponseStatus(HttpStatus.OK)@ApiOperation(value = "获取指定偏移天数的文档列表(如 -1=昨日,-2=前日)")@ApiResponses({ @ApiResponse(code = 200, message = "Success", response = Documents.class, responseContainer = "List")})public List<Documents> getPrevDay( @PathVariable("uztId") Integer uztId, @PathVariable Integer daysOffset) { // 注意:前端应传入负数(如 -1, -2, -3...) return documentsDao.getPrevDay(uztId, daysOffset);}
DAO 层(推荐使用 Java 8 时间 API):
public List<Documents> getPrevDay(Integer uztId, Integer daysOffset) { // 使用系统默认时区,确保日期边界准确 ZoneId zone = ZoneId.systemDefault(); LocalDate targetDate = LocalDate.now().plusDays(daysOffset); // 如 daysOffset = -2 → 前天 Date dateParam = Date.from(targetDate.atStartOfDay(zone).toInstant()); return getCurrentSession() .createQuery("FROM Documents WHERE uztId = :uztId AND dateOfIssue = :dateOfIssue ORDER BY dateOfIssue DESC", Documents.class) .setParameter("uztId", uztId) .setParameter("dateOfIssue", dateParam) // 注意字段名拼写一致性(原问题中 DAO 写为 dataOfIssue,应统一为 dateOfIssue) .getResultList();}
通过该方案,您可轻松扩展为任意日期偏移查询(如跳转到某具体日期),且完全无状态、高并发友好。