You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现点击按钮逐步获取数据库中前N天的文档数据

解决方案

核心问题分析

你当前的代码存在两个关键问题:一是DAO里计算了前一天日期但并未用于查询逻辑,依然在查当日数据;二是没有区分点击次数,每次请求都固定只减一天,无法实现逐天递进回溯的需求。要解决这个问题,需要前端传递「回溯天数」参数,后端根据该参数计算目标日期后执行查询。

步骤1:修改Controller,接收回溯天数参数

给接口新增daysBack参数,用来标识需要回溯的天数(比如第一次点击传1,第二次传2):

@RequestMapping(value = "/getDocsPrevDay/{uztId}", method = RequestMethod.GET)
@ResponseBody
@ResponseStatus(HttpStatus.OK)
@ApiOperation(value = "Get documents by backtracking days")
@ApiResponses({
        @ApiResponse(code = 200, message = "Success", response = ResponseApi.class)
})
public List<Documents> getPrevDay(@PathVariable("uztId") Integer uztId, 
                                  @RequestParam("daysBack") Integer daysBack) {
    // 简单参数校验,避免非法值
    if (daysBack < 1) {
        throw new IllegalArgumentException("daysBack must be at least 1");
    }
    return documentsDao.getPrevDay(uztId, daysBack);
}

步骤2:重构DAO,用Java 8日期API实现日期计算

放弃线程不安全的Date和SimpleDateFormat,改用LocalDate处理日期,同时修正查询逻辑:

private static final String DATE_FORMAT = "dd.MM.yyyy";

public List<Documents> getPrevDay(Integer uztId, Integer daysBack) {
    // 计算目标回溯日期:当前日期减去指定天数
    LocalDate targetDate = LocalDate.now().minusDays(daysBack);
    
    // 日志格式化输出(可选)
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DATE_FORMAT);
    System.out.println("Target date: " + targetDate.format(formatter));

    // 执行HQL查询,匹配目标日期的文档
    List<Documents> documents = getCurrentSession()
            .createQuery("from Documents where uztId = :uztId and dateOfIssue = :targetDate", Documents.class)
            .setParameter("uztId", uztId)
            .setParameter("targetDate", targetDate)
            .getResultList();

    return documents;
}

步骤3:前端配合传递参数

在前端维护一个计数器,初始值为0,每次点击「上一天」按钮时计数器加1,将计数器的值作为daysBack参数传递给后端:

  • 第一次点击:传递daysBack=1 → 获取前1天的文档
  • 第二次点击:传递daysBack=2 → 获取前2天的文档
  • 以此类推

额外注意事项

  • 如果你的dateOfIssue字段是数据库DATE类型,Hibernate会自动完成LocalDate与数据库日期类型的转换
  • 若使用旧版Hibernate不支持LocalDate,可将targetDate转为java.sql.Date后传入:java.sql.Date.valueOf(targetDate)
  • 建议在后端补充更多参数校验逻辑,避免非法请求

内容的提问来源于stack exchange,提问作者treumiton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 21:02:37