日期之间的默认值

时间:2018-06-08 07:55:19

标签: java spring jpa spring-data-jpa

我希望当我不指定任何返回所有预订的日期时 我有一个控制器,使用RequestParam。喜欢这个

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);
}

3 个答案:

答案 0 :(得分:0)

如果你想在date为null时返回所有数据,那么你可以这样做:
从预订中选择DISTINCT r (:date1为null或r.dateRv&gt; = trunc(:date1))和
(:date2为null或r.dateRv&lt; = trunc(:date2))

使用截断功能

答案 1 :(得分:0)

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

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

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

public List<resrvation> 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)
}

答案 2 :(得分: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);