1

当我没有指定任何日期时,我想退回所有预订。

我有一个RequestParam使用 a 的控制器:

public List<resrvation> getAll(@RequestParam(name = "date1",required = false)) String date1,@RequestParam(name = "date2",required = false)) String date2){
    return resrvationService.getAll( date1,date2);
}

我的道:

Query("select DISTINCT  r from reservation  where r.dateRv between :date1 and :date2")
    public List<Reservation> getAll(@Param("date1") Date date1, @Param("date2") Date date2);
}
4

3 回答 3

1

保持简单,创​​建两个方法:

public List<Reservation> getAll():
public List<Reservation> getAll(Date, Date):

在控制器中,根据您收到的参数,调用其中一个。这是一个简单的例子:

public List<reservation> getAll(
    @RequestParam(name = "date1", required = false) String date1,
    @RequestParam(name = "date2", required = false) String date2) {
    return (date1 == null && date2 == null) ? 
        reservationService.getAll() :
        reservationService.getAll(date1, date2);
}
于 2018-06-08T08:17:08.433 回答
0

在不知道您的应用程序技术堆栈是什么的情况下,很难回答您的问题。如果您使用的是 Java8,您还可以对请求参数使用 optional。还可以尝试在 JPA 存储库上使用 spring-data-jpa 派生查询来获得您想要的。

public List<resrvation> getAll(@RequestParam(name = "date1",required = false)) Optional<String> startDate,@RequestParam(name = "date2",required = false)) Optional<String> date2){
if(date1.isPresent() && date2.isPresent()) {
   return reservationService.findAllBetweenStartDateAndEndDate( date1.get(),date2.get());
} else {
   return reservationService.findAll();
}

}

在存储库上

List<Reservation> findAll();
List<Reservation> findByDateBetween(Date startDate, Date endDate);
于 2018-06-08T13:10:30.467 回答
0

如果要在 date 为 null 时返回所有数据,则可以执行以下操作:
select DISTINCT r from reservation where
(:date1 is null or r.dateRv >= trunc(:date1 )) and
(:date2 is null or r .dateRv <= trunc(:date2))

trunc 函数的使用取决于你

于 2018-06-08T08:11:55.990 回答