java datediff函数_JPA Criteria 中 DATEDIFF 函数的使用
项目中有个查询使用了很多 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 函数的使用相关推荐
- matlab stem函数坐标轴_MATLAB中stem函数用法
stem(Y) 将数据序列Y从x轴到数据值按照茎状形式画出,以圆圈终止.如果Y是一个矩阵,则将其每一列按照分隔方式画出. stem(X,Y)在X的指定点处画出数据序列Y. stem(...,'fil ...
- findmid函数c语言,excel find函数用法_excel中mid函数的用法教程详解
[www.gpsvo.com--管理学] Excel中经常需要使用到mid函数进行截取数据,mid函数具体该如何使用操作呢?下面是由小编分享的excel中mid函数的用法,以供大家阅读和学习. exc ...
- java datediff函数_SQL语句中DateDiff函数说明
函数简介: 返回 Variant (Long) 的值,表示两个指定日期间的时间间隔数目. 函数语法: DateDiff(interval, date1, date2[, firstdayofweek[ ...
- Java JNI调用C语言中的函数
1.调用无参函数 java code public class JNITest {static {/*加载*/System.loadLibrary("mynative");}pub ...
- java调用js匿名函数参数,js中匿名函数和回调函数
匿名函数: 通过这种方式定义的函数:(没有名字的函数) 作用:当它不被赋值给变量单独使用的时候 1.将匿名函数作为参数传递给其他函数 2.定义某个匿名函数来执行某些一次性任务 var f = func ...
- java decode函数用法_Oracle 中 decode 函数用法
含义解释: decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下: IF 条件=值1 THEN RETURN(翻译值1) ELSIF 条件=值2 THE ...
- python语言中有哪些函数_Python语言中的函数
本文主要向大家介绍了Python语言中的函数,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 学了 Python 中的数据类型,语句,接下来就来说一下 Python 中的函数,函数 ...
- mysql中vlookup函数_EXCEL表格中VLOOKUP函数怎么用
展开全部 Excel表格中的函数太多,给你个32313133353236313431303231363533e4b893e5b19e31333363363436些常用函数的意义吧(我之前有个回答,就复 ...
- mysql时间函数now()_MySQL中时间函数NOW()和SYSDATE()的区别
mysql中日期函数还是比较常用的.主要有NOW()和SYSDATE()两种,虽然都表示当前时间,但使用上有一点点区别. NOW()取的是语句开始执行的时间,SYSDATE()取的是动态的实时时间. ...
最新文章
- altium designer 原理图和PCB 多通道设计
- 网页打开慢与服务器有关吗,网站打开好慢! 原来是这些原因造成的
- Android监听程序自身被卸载
- [云炬python3玩转机器学习笔记] 3-5Numpy数组和矩阵的基本操作
- TypeScript 2.8引入条件类型
- 阿里巴巴整理的python_阿里P8大佬整理的2020年最全99道python面试题,文末附答案...
- 初入c++(七)运算符的重载+、-、*、/、[]、自加++的重载
- ES6 的发布,加速 JavaScript 框架淘汰?
- 买下个月的iPhone新机要花多少钱?
- Linux 中断下半部
- 关联本地项目和svn_技术贴 本地代码与svn关联教程 svn upgrade问题解决
- HitPaw Watermark Remover v1.2.0.3 图片视频水印去除
- 浏览器端技术体系概览 -- 前端开发的七种武器
- Monitor对象是什么?
- python opencv生成背景透明图标
- (个人笔记系列) Java基础语法
- 嵌入式音频架构 - AudioWeaver模块开发
- keras实现回归预测
- 河南联通网通封杀路由器解决办法
- android 设置路由器,安卓手机怎么设置路由器?
热门文章
- selenium 无法启动IE浏览器的解决方法
- hadoop异常: java.io.EOFException: Unexpected end of input stream
- Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1)问题解决
- VS2015 无法启动 IIS Express Web 服务器 解决方案
- jQuery.ajax处理继续响应:“成功:”还是“ .done”?
- JAVA编程思想——读书笔记 类再生
- windows oracle .msb not found,oracle安装, Message file sp1lang.msb not found
- ccs 移植创建新工程_CCS-6-新建TMS320F28335工程(可移植)).pdf
- arcgis engine设置数据源路径_不用ArcGIS做前期分析,你是不是想被辞!
- phpinfo 有imagick php artisan 没有_WordPress 上传图片时 async-upload.php出现520 Bug的原因及解决方案...