sql为
select * from user where register_time>=to_timestamp('2021-06-27 10:09:45','yyyy-MM-dd HH:mi:ss') and register_time<=to_timestamp('2021-09-26 10:49:15','yyyy-MM-dd HH:mi:ss')
用JPA实现
@Test
public void testSpec() {
Specification<User> spec = new Specification<User>() {
@Override
public Predicate toPredicate(Root<User> root, CriteriaQuery<?> cq, CriteriaBuilder criteriaBuilder) {
List<Predicate> predicateList = new ArrayList<Predicate>();
predicateList.add(criteriaBuilder.greaterThanOrEqualTo(criteriaBuilder.function("to_timestamp", Date.class,root.get("registerTime"), criteriaBuilder.literal("yyyy-MM-dd HH:mm:ss")),getDate("2021-06-27 10:09:45")));
predicateList.add(criteriaBuilder.lessThanOrEqualTo(criteriaBuilder.function("to_timestamp", Date.class,root.get("registerTime"), criteriaBuilder.literal("yyyy-MM-dd HH:mm:ss")),getDate("2021-09-26 10:49:15")));
return criteriaBuilder.and(predicateList.toArray(new Predicate[0]));
}
};
List<User> users = userDao.findAll(spec);
}
其中,日期转换函数为
private Date getDate(String dateString){
if(dateString==null) return null;
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date newDate=null;
try {
newDate = sdf.parse(dateString);
} catch (ParseException e) {
e.printStackTrace();
}
return newDate;
}