【问题标题】:How can I fetch data or records by date column in Spring Boot?如何在 Spring Boot 中按日期列获取数据或记录?
【发布时间】:2021-08-30 08:11:06
【问题描述】:

实际上,我有包含列的订单实体(表),我想根据 createddatetime 列过滤订单数据。 基本场景是,当用户选择任何日期时,例如:createddate 是 03-06-2021,并且该日期存在 3-4 条记录,因此它将能够显示 mysql 数据库中该日期存在的总记录.

    @Builder.Default
    @Column(updatable=false)
    @JsonFormat(shape=JsonFormat.Shape.STRING,pattern="yyyy-MM-dd hh:mm:ss")
    private Date createddatetime=new Date();    
  

我在 Orders JPA 存储库中创建了这样的函数:

    List<Orders> findByCreateddatetimeOrderByCreateddatetimeDesc(Date createddate);

以下是我的 API 控制器代码,用于获取特定日期的记录。但是在点击这个时,我没有得到任何响应(错误响应)。

@RequestMapping(value = AkApiUrl.onedayorder, method = { RequestMethod.POST, RequestMethod.GET }, produces = {MediaType.APPLICATION_JSON_VALUE })
    public ResponseEntity<?> onedayorder(HttpServletRequest request, @RequestParam("limit") int limit, @RequestParam("createddate") String createddate ) {
        CustomResponse = ResponseFactory.getResponse(request);
        int min = limit - 1;
        int max = Constants.limitResult;
        try {
            List<Orders> order = null;
            List<Orders> totalorders = null;
            Pageable pageable = new PageRequest(min, max, Sort.Direction.ASC, "orderid");
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            Date onedayorder = sdf.parse(createddate);
            if(createddate != null && createddate != "") {
                order = ordersdao.findByCreateddatetimeOrderByCreateddatetimeDesc(onedayorder, pageable);
                totalorders = ordersdao.findByCreateddatetimeOrderByCreateddatetimeDesc(onedayorder);
            }else {
                order = ordersdao.findAllByStatus(1, pageable);
                totalorders = ordersdao.findAllByStatus(1);
            }
            if (order != null) {
                CustomResponse.setResponse(order);
                CustomResponse.setMaxlimit(Constants.limitResult);
                CustomResponse.setTotalorders(totalorders.size());
                CustomResponse.setStatus(CustomStatus.OK);
                CustomResponse.setStatusCode(CustomStatus.OK_CODE);
            }
        } catch (Exception e) {
            e.printStackTrace();
            CustomResponse.setResponse(null);
            CustomResponse.setStatus(CustomStatus.Error);
            CustomResponse.setStatusCode(CustomStatus.Error_CODE);
        }
        return new ResponseEntity<ResponseDao>(CustomResponse, HttpStatus.OK);
    }

我尝试@Query 使用 like 运算符创建自定义查询,但再次遇到类型不匹配错误。 我该如何解决这个问题?任何建议都会很有价值。

【问题讨论】:

    标签: java ajax spring-boot jsp spring-data-jpa


    【解决方案1】:

    似乎数据以与您搜索的格式不同的格式保存。 您可以应用以下任何一种解决方案:

    1- 确保使用相同的日期格式

    2- 忽略日期的时间部分,您可以使用大于并传递两个日期,例如 (createdDate >= 2021-06-14 and createdDate

    3- 拆分您的搜索日期输入并使用函数进行搜索,如本例

    @Query("select e from Event e where year(e.eventDate) = ?1 and month(e.eventDate) = ?2")
    List<Entity> getByYearAndMonth(int year, int month);
    

    【讨论】:

    • 如何从前端处理这些事情?因为用户将只能看到单个日期字段,并且需要使用 Ajax 在 javascript 函数中传递单个日期。
    • 您不必通过前端进行操作。您可以执行以下操作: String[] splittedDate = createddate.split("-");然后将其传递给查询 ordersdao.findByCreateddatetimeOrderByCreateddatetimeDesc(splittedDate[0],splittedDate[1],splittedDate[2], pageable);你查询的地方是这样的:@Query("select e from Event e where year(e.eventDate) = ?1 and month(e.eventDate) = ?2 and day(e.eventDate) = ?3") List getByYearAndMonth(int year, int month,int day);
    • 那么,在javascript函数中该怎么做呢?我想获取记录并在表中显示该记录。如果我从那里选择任何日期,那么它将如何与我的后端代码进行通信。
    • 快速缩放调用?
    • 嗨,抱歉,解决方案对我不起作用。有没有其他方法可以按日期搜索或获取订单列表?
    【解决方案2】:

    在您的数据库中,日期模式为“yyyy-MM-dd hh:mm:ss”,因此请执行如下范围查询:

    List<Orders> findByCreateddatetimeBetweenOrderByCreateddatetimeDesc(Date createddateBegin, Date createddateEnd);
    

    并给出一天,你想要从午夜到午夜。

    【讨论】:

    • 如果我谈论 UI 部分,即从前端有一个日期字段。那么,我应该如何在我的 Orders JSP 页面中使用 JavaScript 或带有 Ajax 的 jQuery 来处理这些事情?
    • 什么意思?您可以使用日期,在 java 代码中,您可以调用 date.setHours()
    • 拜托,你有什么例子可以展示,因为我以前没有处理过这样的事情吗?
    • 日历 cal = Calendar.getInstance(); // 创建日历 cal.setTime(yourDate); // 设置日历时间/日期 cal.set(Calendar.HOUR_OF_DAY, 0); // 将小时设置为 0 cal.getTime(); // 返回日期为 0 小时
    猜你喜欢
    • 1970-01-01
    • 2016-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多