时间处理

根据时间段查询数据的场景,前端通常只给出日期而不包括时间,例如:startDate=2019-01-01&endDate=2019-01-01表示查询2019年1月1日全天(2019-01-01 00:00:00~2019-01-01 23:59:59)的数据。@QueryCondition注解提供datePolicy配置,支持对参数中时间的处理(取特定时间粒度的开始/结束)。

class Foo {
    Long id;
    Date birthday;
}
class FooQo {
    @QueryCondition(field="birthday", datePolicy=DatePolicy.START_OF_DAY, type=Condition.NOT_LESS_THAN)
    Date startDate;
    @QueryCondition(field="birthday", datePolicy=DatePolicy.END_OF_DAY, type=Condition.NOT_GREATER_THAN)
    Date endDate;
}

FooQo fooQo = new FooQo("foo", "2019-01-01", "2019-01-01");
Specification<Foo> specification = SpecificationFactory.getSpecification(fooQo);
List<Foo> foos = fooRepository.findAll(specification);

生成的SQL:

SELECT * FROM FOO
WHERE FOO.BIRTHDAY >= '2019-01-01 00:00:00'
    AND FOO.BIRTHDAY <= '2019-01-01 23:59:59';

Last updated