首页 > 数据库技术 > 详细

JPA query between的多种方式(mongodb为例)

时间:2020-11-25 22:31:54      阅读:33      评论:0      收藏:0      [点我收藏+]

背景

JPA+MongoDB查询,给定一段时间范围查询分页结果,要求时间范围包含。

Page<Log> findByCtimeBetweenOrderByCtime(
            LocalDateTime startTime, LocalDateTime endTime, Pageable pageable);

这时候打印的日志为:

find using query: { "ctime" : { "$gt" : { "$date" : 1605682694000 }, "$lt" : { "$date" : 1605682800000 } } 

没有包含时间范围的边界,不符合要求

实现一

这个实现很骚,官网有解释:
技术分享图片

查询代码:

@Query(value = "{‘ctime‘: {$gte : ?0, $lte : ?1}}")
Page<Log> findByCtimeBetweenOrderByCtime(
            LocalDateTime startTime, LocalDateTime endTime, Pageable pageable);

这时候打印的日志为:

find using query: { "ctime" : { "$gte" : { "$date" : 1605682694000 }, "$lte" : { "$date" : 1605682800000 } }

可以看到,已经包含了时间范围。

实现二

Range<LocalDateTime> timeRange = Range.from(Range.Bound.inclusive(startTime)).to(Range.Bound.inclusive(endTime));
Page<Log> page = logRepository.findByCtimeBetweenOrderByCtime(timeRange, pageable);
...
Page<ScheduleLog> findByCtimeBetweenOrderByCtime(Range<LocalDateTime> timeRange, Pageable pageable);

这里的LocalDateTime不支持,因为LocalDateTime实现的Comparable接口中给定的范型参数不是LocalDateTime,不符合参数要求,但是换个查询类型就可以了,比如Integer此类的。

实现三

@Query("select * from Log where ctime >= ?0 and ctime <= ?1")
Page<Log> findByCtimeBetweenOrderByCtime(
            LocalDateTime startTime, LocalDateTime endTime, Pageable pageable);

这种方案我个人不太喜欢,哈哈,就是想用对象,不想写过程查询语句。

参考

JPA query between的多种方式(mongodb为例)

原文:https://www.cnblogs.com/mrcharleshu/p/14037713.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!