背景

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. 从一个例子入手Istio

    转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com 本文使用的Istio源码是 release 1.5. 本篇是Istio系列的第一篇,希望 ...

  2. Redis【二】 set|get那些事

    redis4.0.9 SET\GET方法 从哪里开始 server.c里面有每个redis命令对应的执行方法 如 struct redisCommand redisCommandTable[] = { ...

  3. Deployment YAML方式创建Nginx服务

    replication controller Replication Controller为Kubernetes的一个核心内容,应用托管到Kubernetes之后,需要保证应用能够持续的运行,Repl ...

  4. RuntimeError: one of the variables needed for gradient computation has been modified by an inplace operation

    问题 在用pytorch跑生成对抗网络的时候,出现错误Runtime Error: one of the variables needed for gradient computation has b ...

  5. [Luogu P4178]Tree (点分治+splay)

    题面 传送门:https://www.luogu.org/problemnew/show/P4178 Solution 首先,长成这样的题目一定是淀粉质跑不掉了. 考虑到我们不知道K的大小,我们可以开 ...

  6. 教你写个简单到的 Redis Client 框架 - .NET Core

    目录 1,关于 Redis RESP 定义数据类型 2,定义异步消息状态机 3,定义命令发送模板 4,定义 Redis Client 5,实现简单的 RESP 解析 6,实现命令发送客户端 7,如何使 ...

  7. MSSQL 模糊搜索全文(过程、函数、触发器等)

    --SQL Server数据库查找含有某个关键字的存储过程.函数.触发器等 --SQL Server数据库查找含有某个关键字的存储过程,SQL语句如下: SELECT OBJECT_NAME(b.pa ...

  8. 下载eclipse及其插件

    1.安装JDK 2.配置JAVA_HOME 3.具体下载地址 (1)JDK的下载和安装 jdk官网 http://www.oracle.com/technetwork/java/javase/down ...

  9. Pandas_工资集处理

    import numpy as np import pandas as pd from pandas import Series,DataFrame # 1--读取数据文件 file_obj=open ...

  10. java版飞机大战代码

    @ 目录 前言 Plane PlaneStatus类 Power类 Gift Diji play类 over类 MainFrame主类 MyZiDan DijiZiDan Before 前言 很久之前 ...