项目中有个查询使用了很多 left join 语句,查询出来的总记录数有二十几万条,而每次查询时就只要查询某一天的数据,及时这样分页查询时依旧很慢。 优化时把条件一个一个删掉,发现日期条件比较那里消耗了很多时间。sql 里面的日期比较是使用大小比较的,改成 DATEDIFF 函数后速度明显提升了。

项目查询时使用的是 Spring-Data-JPA Criteria,其中 DATEDIFF 查询代码如下:

Specification specification = (root, query, cb) -> {

List predicates = new ArrayList<>();

...

Expression day = new MyFunctionExpression(null, String.class, "DAY");

Expression diff = cb.function("DATEDIFF", Integer.class, day, cb.literal(paramDTO.getReportDate()), root.get("createdDate"));

predicates.add(cb.equal(diff, 0));

...

if (predicates.size() > 0) {

Predicate[] pre = new Predicate[predicates.size()];

return query.where(predicates.toArray(pre)).getRestriction();

}

return null;

};

import org.hibernate.query.criteria.internal.CriteriaBuilderImpl;

import org.hibernate.query.criteria.internal.compile.RenderingContext;

import org.hibernate.query.criteria.internal.expression.function.BasicFunctionExpression;

public class MyFunctionExpression extends BasicFunctionExpression {

public MyFunctionExpression(CriteriaBuilderImpl criteriaBuilder, Class javaType, String functionName) {

super(criteriaBuilder, javaType, functionName);

}

@Override

public String render(RenderingContext renderingContext) {

return getFunctionName();

}

}

刚开始参考网上写成:

Expression day = cb.literal("day");

Expression diff = cb.function("DATEDIFF", Integer.class, day, cb.literal(paramDTO.getReportDate()), root.get("createdDate"));

predicates.add(cb.equal(diff, 0));

运行时会报:

为 datediff 指定的参数 1 无效。

原因是上面的写法,sql 解析时会把 "day" 字符串放到 DATEDIFF 函数的第一个参数位置上,即 DATEDIFF('day', x, y),而不是 DATEDIFF(day, x, y) 这种形式。

java datediff函数_JPA Criteria 中 DATEDIFF 函数的使用相关推荐

  1. matlab stem函数坐标轴_MATLAB中stem函数用法

    stem(Y) 将数据序列Y从x轴到数据值按照茎状形式画出,以圆圈终止.如果Y是一个矩阵,则将其每一列按照分隔方式画出. stem(X,Y)在X的指定点处画出数据序列Y.  stem(...,'fil ...

  2. findmid函数c语言,excel find函数用法_excel中mid函数的用法教程详解

    [www.gpsvo.com--管理学] Excel中经常需要使用到mid函数进行截取数据,mid函数具体该如何使用操作呢?下面是由小编分享的excel中mid函数的用法,以供大家阅读和学习. exc ...

  3. java datediff函数_SQL语句中DateDiff函数说明

    函数简介: 返回 Variant (Long) 的值,表示两个指定日期间的时间间隔数目. 函数语法: DateDiff(interval, date1, date2[, firstdayofweek[ ...

  4. Java JNI调用C语言中的函数

    1.调用无参函数 java code public class JNITest {static {/*加载*/System.loadLibrary("mynative");}pub ...

  5. java调用js匿名函数参数,js中匿名函数和回调函数

    匿名函数: 通过这种方式定义的函数:(没有名字的函数) 作用:当它不被赋值给变量单独使用的时候 1.将匿名函数作为参数传递给其他函数 2.定义某个匿名函数来执行某些一次性任务 var f = func ...

  6. java decode函数用法_Oracle 中 decode 函数用法

    含义解释: decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下: IF 条件=值1 THEN RETURN(翻译值1) ELSIF 条件=值2 THE ...

  7. python语言中有哪些函数_Python语言中的函数

    本文主要向大家介绍了Python语言中的函数,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 学了 Python 中的数据类型,语句,接下来就来说一下 Python 中的函数,函数 ...

  8. mysql中vlookup函数_EXCEL表格中VLOOKUP函数怎么用

    展开全部 Excel表格中的函数太多,给你个32313133353236313431303231363533e4b893e5b19e31333363363436些常用函数的意义吧(我之前有个回答,就复 ...

  9. mysql时间函数now()_MySQL中时间函数NOW()和SYSDATE()的区别

    mysql中日期函数还是比较常用的.主要有NOW()和SYSDATE()两种,虽然都表示当前时间,但使用上有一点点区别. NOW()取的是语句开始执行的时间,SYSDATE()取的是动态的实时时间. ...

最新文章

  1. altium designer 原理图和PCB 多通道设计
  2. 网页打开慢与服务器有关吗,网站打开好慢! 原来是这些原因造成的
  3. Android监听程序自身被卸载
  4. [云炬python3玩转机器学习笔记] 3-5Numpy数组和矩阵的基本操作
  5. TypeScript 2.8引入条件类型
  6. 阿里巴巴整理的python_阿里P8大佬整理的2020年最全99道python面试题,文末附答案...
  7. 初入c++(七)运算符的重载+、-、*、/、[]、自加++的重载
  8. ES6 的发布,加速 JavaScript 框架淘汰?
  9. 买下个月的iPhone新机要花多少钱?
  10. Linux 中断下半部
  11. 关联本地项目和svn_技术贴 本地代码与svn关联教程 svn upgrade问题解决
  12. HitPaw Watermark Remover v1.2.0.3 图片视频水印去除
  13. 浏览器端技术体系概览 -- 前端开发的七种武器
  14. Monitor对象是什么?
  15. python opencv生成背景透明图标
  16. (个人笔记系列) Java基础语法
  17. 嵌入式音频架构 - AudioWeaver模块开发
  18. keras实现回归预测
  19. 河南联通网通封杀路由器解决办法
  20. android 设置路由器,安卓手机怎么设置路由器?

热门文章

  1. selenium 无法启动IE浏览器的解决方法
  2. hadoop异常: java.io.EOFException: Unexpected end of input stream
  3. Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1)问题解决
  4. VS2015 无法启动 IIS Express Web 服务器 解决方案
  5. jQuery.ajax处理继续响应:“成功:”还是“ .done”?
  6. JAVA编程思想——读书笔记 类再生
  7. windows oracle .msb not found,oracle安装, Message file sp1lang.msb not found
  8. ccs 移植创建新工程_CCS-6-新建TMS320F28335工程(可移植)).pdf
  9. arcgis engine设置数据源路径_不用ArcGIS做前期分析,你是不是想被辞!
  10. phpinfo 有imagick php artisan 没有_WordPress 上传图片时 async-upload.php出现520 Bug的原因及解决方案...