SpringBoot JPA MySQL实现订单按单日时间范围过滤
实现近一天订单查询接口的方案
1. 扩展OrderRepository接口
Spring Data JPA支持两种方式实现时间范围查询,任选其一即可:
方式一:派生查询(简洁推荐)
直接在OrderRepository中定义方法,Spring会自动生成对应查询语句:
package com.proj.my.repository; import com.proj.my.model.Order; import org.springframework.data.jpa.repository.JpaRepository; import java.time.LocalDate; import java.util.List; public interface OrderRepository extends JpaRepository<Order, Integer> { // 根据createdAt的时间范围查询订单 List<Order> findByCreatedAtBetween(LocalDate startDate, LocalDate endDate); }
方式二:@Query注解自定义JPQL
如果需要更灵活的查询逻辑,可使用注解编写JPQL:
package com.proj.my.repository; import com.proj.my.model.Order; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import java.time.LocalDate; import java.util.List; public interface OrderRepository extends JpaRepository<Order, Integer> { @Query("SELECT o FROM Order o WHERE o.createdAt BETWEEN :startDate AND :endDate") List<Order> findOrdersByDateRange(@Param("startDate") LocalDate startDate, @Param("endDate") LocalDate endDate); }
2. 在OrderService中新增业务方法
添加获取近一天订单的方法,自动计算时间范围:
// 在OrderService类中新增以下方法 public List<Order> getOrdersFromLastDay() { LocalDate today = LocalDate.now(); LocalDate yesterday = today.minusDays(1); // 对应方式一的调用 return orderRepository.findByCreatedAtBetween(yesterday, today); // 如果用方式二,替换为下面这句 // return orderRepository.findOrdersByDateRange(yesterday, today); }
3. 在OrderController中新增接口
暴露HTTP接口供外部调用:
// 在OrderController类中新增以下GET接口 @GetMapping("/getOrdersLastDay") public List<Order> getOrdersFromLastDay() { return orderService.getOrdersFromLastDay(); }
补充说明
- 你的
Order实体中createdAt字段使用LocalDate类型,刚好匹配日期范围查询,无需处理时间部分;如果是LocalDateTime类型,需额外调整时间范围至当日的起始和结束时刻。 - 你之前注释的代码存在几个问题:JPQL中实体名需与类名一致(应为
Order而非order),参数不能直接写LocalDate.now(),需通过@Param传递,上述方案已修正这些问题。
内容的提问来源于stack exchange,提问作者Dadinho2000
相关产品推荐
相关产品推荐

