背景

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为例)的更多相关文章

  1. PDO多种方式取得查询结果

    PDO多种方式取得查询结果 01 December 2009 1:26 Tuesday by Sjolzy PDO最大的特点之一是它的灵活性,本节将介绍如何取得查询结果,包括: 数组(数值或关联数组) ...

  2. Vue通信、传值的多种方式,详解

    Vue通信.传值的多种方式,详解 转自:https://blog.csdn.net/qq_35430000/article/details/79291287 一.通过路由带参数进行传值 ①两个组件 A ...

  3. Spring Data Jpa的四种查询方式

    一.调用接口的方式 1.基本介绍 通过调用接口里的方法查询,需要我们自定义的接口继承Spring Data Jpa规定的接口 public interface UserDao extends JpaR ...

  4. 【Spring Data 系列学习】Spring Data JPA @Query 注解查询

    [Spring Data 系列学习]Spring Data JPA @Query 注解查询 前面的章节讲述了 Spring Data Jpa 通过声明式对数据库进行操作,上手速度快简单易操作.但同时 ...

  5. idea打包jar的多种方式

    这里总结出用IDEA打包jar包的多种方式,以后的项目打包Jar包可以参考如下形式: 用IDEA自带的打包形式 用Maven插件maven-shade-plugin打包 用Maven插件maven-a ...

  6. Java中测试异常的多种方式

    使用JUnit来测试Java代码中的异常有很多种方式,你知道几种? 给定这样一个class. Person.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...

  7. Spring学习总结(一)——Spring实现IoC的多种方式

    控制反转IoC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IoC的一种方法,也有人认为DI只是IoC的另一种说法.没有IoC的程序中我们使用面向对象编程对象的创 ...

  8. java 获取classpath下文件多种方式

    java 获取classpath下文件多种方式 一:properties下配置 在resources下定义server.properties register.jks.path=classpath\: ...

  9. IOC和AOP使用扩展 多种方式实现依赖注入

    多种方式实现依赖注入 1.Spring 使用setter访问器实现对属性的赋值, 2.Spring 构造constructor方法赋值, 3.接口注入 4.Spring P命名空间注入直接量 sett ...

随机推荐

  1. drf (学习第二部)

    目录 http球球处理 请求与响应 Response 常用属性 状态码 http请求处理 drf除了在数据序列化部分简写代码之外,还在视图中提供了简写操作.所以在Django原有的Django.vie ...

  2. golang开发:http请求redirect的问题

    这两天在开发项目的时候遇到了一个问题,请求了一个URL,它会302到另一个地址,本意上只是想检查这个URL是否会做3XX的redirect跳转,结果每次reqeust都会返回最后一跳的结果.后来就看了 ...

  3. OLTP与OLAP的介绍(理论知识)

    OLTP与OLAP的介绍 数据处理大致可以分成两大类:联机事务处理OLTP(on-line transaction processing).联机分析处理OLAP(On-Line Analytical ...

  4. APP后台架构20191205

    1.架构,架构与业务紧密相关,是有业务驱动的. 2.APP后台演进原则. App后台的架构是由业务规模驱动而演进的,App后台是为业务服务的,App后台的价值在于能为业务提供其所需要的功能,不应过度设 ...

  5. Kubernetes Scheduler浅析

    概述 Kubernetes 调度器(Scheduler)是Kubernetes的核心组件:用户或者控制器创建Pod之后,调度器通过 kubernetes 的 watch 机制来发现集群中新创建且尚未被 ...

  6. python日期与日历Datetime和Calendar模块

    datetime模块 1.1 概述 datetime比time高级了不少,可以理解为datetime基于time进行了封装,提供了更多的实用的函数,datetime的接口更加的直观,更容易调用 1.2 ...

  7. python的分支语句与循环

    一.分支语句 1.if else语句 语法: if 条件判断: 执行的语句块1 else : 执行语句块2 当满足条件的时候则执行语句块1 ,不满足条件就执行语句块2 注意:1.条件判断后面要加冒号& ...

  8. Bucardo使用文档-lottu

    官网地址 一.Bucardo介绍 Bucardo 是基于表复制的系统 Bucardo 可以实现PostgreSQL数据库的双master/多master的方案 Bucardo的核心是一个Perl守护进 ...

  9. Ordering Cows

    题意描述 好像找不到链接(找到了请联系作者谢谢),所以题目描述会十分详细: Problem 1: Ordering Cows [Bruce Merry, South African Computer ...

  10. 【Luogu】 P6274 [eJOI2017]六 题解

    首先,题目说了最多\(6\)个质因数. 如此小的数据范围,不是状压还是啥? 然后,我们可以发现一个性质:只要两个因数有相同的质因数(不管次数是多少),两者就不互质. 这启示我们用一个二进制数来表示一类 ...