Hibernate中HQL函数汇总
2017-03-25 20:25
239 查看
在数据访问层(DAO层)通常我们会使用sql语句或者hql语句,而在我们使用hql语句拼接时有时会报错,
通常的原因是:我们使用了标准的sql语句,开启的确是hibernate的面向对象的语句
sessionFactory.getCurrentSession().createQuery(sql);
我们应改成 sessionFactory.getCurrentSession().createSQL(sql);就可以了。
必须要使用HQL语句:
函数名称
1、UNIX_TIMESTAMP()转换到秒,到1970年
2、FROM_UNIXTIME 从秒专函到时间
3、current_date()当前日期
4、current_time()当前时间
5、current_timestamp()当前时间戳
6、TO_DAYS()转换为天
7、FROM_DAYS从天转换到时间
例子:
1、from Article where UNIX_TIMESTAMP(addTime) > UNIX_TIMESTAMP(current_timestamp()) - 24 * 60 * 60
2、from Article where TO_DAYS(addTime) > TO_DAYS(current_timestamp()) - 1
注意:hql语句中不推荐使用
from Article where addTime > current_date() - 1这种写法,通常情况下是没有问题,但遇到特殊情况就会产生异常。
例如当前日期为11月1号,则current_date() - 1会生成日期1970-01-01,然后条件查询的时候就查询不出来任何东西。
可以写hql测试 select current_date() - 1 from Article; 其中Article为一个实体类,测试的时候,
将数据库所在的服务器时间修改为某月的1号,打印查询的list返回结果集合中的一个
String hql = "select current_date() - 1 from Article";
List<Objcec> ret = session.createQuery(hql).setMaxResults(1).list();
if(ret.size() > 0){
Object entry = ret.get(0);System.out.println(entry);
}else{System.out.println("null");}
附:mysql支持的时间处理函数
DATE_ADD()、DATE_SUB()、TO_DAYS()、FROM_DAYS()、STR_TO_DATE()、CURRENT_TIMESTAMP()、UNIX_TIMESTAMP()、FROM_UNIXTIME()
通常的原因是:我们使用了标准的sql语句,开启的确是hibernate的面向对象的语句
sessionFactory.getCurrentSession().createQuery(sql);
我们应改成 sessionFactory.getCurrentSession().createSQL(sql);就可以了。
必须要使用HQL语句:
函数名称
说明 | 类型 | 支持 | 使用方法 | 备注 | |
ABS(n) | 取绝对值 | 数学函数 | JPAQL HQL | ABS(column_name[数字类型对象属性]) | |
SQRT(n) | 取平方根 | 数学函数 | JPAQL HQL | SQRT(column_name[数字类型对象属性]) | |
MOD(x,y) | 取余数 | 数学函数 | JPAQL HQL | MOD([对象属性(数字)或值],[对象属性(数字)或值]) | 数字必须是整型,返回参数1/参数2得的余数 |
SIZE(c) | 方法集合内对象数量 | 集合函数 | JPAQL HQL | ||
MINELEMENT(c) | 返回集合中最小元素 | 集合函数 | HQL | ||
MAXELEMENT(c) | 返回集合中最大元素 | 集合函数 | HQL | ||
MININDEX(c) | 返回索引集合最小索引 | 集合函数 | HQL | ||
MAXINDEX(c) | 返回索引集合最大索引 | 集合函数 | HQL | ||
MAX(n) | 返回最大值 | 集合函数 | JPQHQL HQL | ||
MIN(n) | 返回最小值 | 集合函数 | JPQHQL HQL | ||
COUNT(n) | 返回计数 | 集合函数 | JPQHQL HQL | ||
CONCAT(s1,s2) | 连接连个字符串 | 字符串函数 | JPQHQL HQL | CONCAT([对象属性],[对象属性]) | |
SUBSTRING(s,offset,length) | 返回子串 | 字符串函数 | JPQHQL HQL | SUBSTRING([要截取的字符串属性字段],开始位置,截取长度) | |
TRIM([[BOTH/LEADING/TRAILING]] char FROM s) | 默认去掉字符串两面的空格 | 字符串函数 | JPQHQL HQL | TRIM([字符串对象属性列]) | 将字段两端的空格去掉 |
LOWER(s) | 小写 | 字符串函数 | JPQHQL HQL | LOWER([字符串对象属性列]) | 将该列结果含有的字母全部大写 |
UPPER(s) | 大写 | 字符串函数 | JPQHQL HQL | UPPER([字符串对象属性列]) | 将该列结果含有的字母全部大写 |
LENGTH(s) | 返回字符串长度 | 字符串函数 | JPQHQL HQL | LENGTH(字段名) | 返回字段内容的长度,包括数字。null值返回null. |
CURRENT_DATE() | 返回数据库当前日期 | 时间函数 | JPAQL HQL | CURRENT_DATE() | 返回数据库当前日期 |
CURRENT_TIME() | 时间 | 时间函数 | JPAQL HQL | CURRENT_TIME() | 返回数据库当前时间 |
SECOND(d) | 从日期中提取具体秒 | 时间函数 | HQL | SECOND(时间字段) | 空的时候返回null |
MINUTE(d) | 从日期中提取具体分 | 时间函数 | HQL | MINUTE(时间字段) | 空的时候返回null |
HOUR(d) | 从日期中提取具体小时 | 时间函数 | HQL | HOUR(时间字段 | 空的时候返回null |
DAY(d) | 从日期中提取具体天 | 时间函数 | HQL | DAY(时间字段) | 空的时候返回null |
MONTH(d) | 从日期中提取具体月 | 时间函数 | HQL | MONTH(时间字段) | 空的时候返回null |
YEAR(d) | 从日期中提取具体年 | 时间函数 | HQL | YEAR(时间字段) | 空的时候返回null |
2、FROM_UNIXTIME 从秒专函到时间
3、current_date()当前日期
4、current_time()当前时间
5、current_timestamp()当前时间戳
6、TO_DAYS()转换为天
7、FROM_DAYS从天转换到时间
例子:
1、from Article where UNIX_TIMESTAMP(addTime) > UNIX_TIMESTAMP(current_timestamp()) - 24 * 60 * 60
2、from Article where TO_DAYS(addTime) > TO_DAYS(current_timestamp()) - 1
注意:hql语句中不推荐使用
from Article where addTime > current_date() - 1这种写法,通常情况下是没有问题,但遇到特殊情况就会产生异常。
例如当前日期为11月1号,则current_date() - 1会生成日期1970-01-01,然后条件查询的时候就查询不出来任何东西。
可以写hql测试 select current_date() - 1 from Article; 其中Article为一个实体类,测试的时候,
将数据库所在的服务器时间修改为某月的1号,打印查询的list返回结果集合中的一个
String hql = "select current_date() - 1 from Article";
List<Objcec> ret = session.createQuery(hql).setMaxResults(1).list();
if(ret.size() > 0){
Object entry = ret.get(0);System.out.println(entry);
}else{System.out.println("null");}
附:mysql支持的时间处理函数
DATE_ADD()、DATE_SUB()、TO_DAYS()、FROM_DAYS()、STR_TO_DATE()、CURRENT_TIMESTAMP()、UNIX_TIMESTAMP()、FROM_UNIXTIME()
相关文章推荐
- Hibernate中HQL函数汇总及其说明
- Hibernate中HQL函数汇总及其说明
- Hibernate中HQL函数汇总及获取当前时间进行比较举例
- Hibernate中HQL函数汇总及其说明
- Hibernate_HQL函数汇总及其说明
- Hibernate中HQL函数汇总及其说明
- Hibernate中HQL函数汇总及其说明
- Hibernate中HQL函数汇总及其说明
- Hibernate中HQL函数汇总及其说明
- Hibernate中HQL函数汇总及其说明
- Hibernate中HQL函数汇总及其说明
- Hibernate hql getHibernateTemplate()常用方法汇总
- Hibernate hql查询语句 Count:统计函数 Min:求最小值函数 Max:求最大值函数 Sum:求和函数 Avg:求平均数函数
- Hibernate、NHibernate下的函数汇总
- Hibernate 查询方式(HQL/QBC/QBE)汇总
- 关于 Hibernate 的 SQLFunctionTemplate 的问题(HQL 不支持mysql 函数convert的问题)
- Hibernate的HQL支持数据库函数
- Hibernate 查询方式(HQL/QBC/QBE)汇总
- java 读取mysql排序 hql中对mysql中文排序完整解决方案 hibernate注册mysql数据库的函数
- Hibernate的hql常用语句整理汇总