您的位置:首页 > 其它

Hibernate中HQL函数汇总

2017-03-25 20:25 239 查看
       在数据访问层(DAO层)通常我们会使用sql语句或者hql语句,而在我们使用hql语句拼接时有时会报错,

通常的原因是:我们使用了标准的sql语句,开启的确是hibernate的面向对象的语句

                   sessionFactory.getCurrentSession().createQuery(sql);

我们应改成 sessionFactory.getCurrentSession().createSQL(sql);就可以了。

必须要使用HQL语句:

函数名称

说明类型支持使用方法备注
ABS(n)取绝对值数学函数JPAQL HQLABS(column_name[数字类型对象属性])
SQRT(n)取平方根数学函数JPAQL HQLSQRT(column_name[数字类型对象属性])
MOD(x,y)取余数数学函数JPAQL HQLMOD([对象属性(数字)或值],[对象属性(数字)或值])数字必须是整型,返回参数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 HQLCONCAT([对象属性],[对象属性])
SUBSTRING(s,offset,length)返回子串字符串函数JPQHQL HQLSUBSTRING([要截取的字符串属性字段],开始位置,截取长度)
TRIM([[BOTH/LEADING/TRAILING]] char FROM s)默认去掉字符串两面的空格字符串函数JPQHQL HQLTRIM([字符串对象属性列])将字段两端的空格去掉
LOWER(s)小写字符串函数JPQHQL HQLLOWER([字符串对象属性列])将该列结果含有的字母全部大写
UPPER(s)大写字符串函数JPQHQL HQLUPPER([字符串对象属性列])将该列结果含有的字母全部大写 
LENGTH(s)返回字符串长度字符串函数JPQHQL HQLLENGTH(字段名)返回字段内容的长度,包括数字。null值返回null.
CURRENT_DATE()返回数据库当前日期时间函数JPAQL HQLCURRENT_DATE()返回数据库当前日期
CURRENT_TIME()时间时间函数JPAQL HQLCURRENT_TIME()返回数据库当前时间
SECOND(d)从日期中提取具体秒时间函数HQLSECOND(时间字段)空的时候返回null
MINUTE(d)从日期中提取具体分时间函数HQLMINUTE(时间字段)空的时候返回null
HOUR(d)从日期中提取具体小时时间函数HQLHOUR(时间字段空的时候返回null
DAY(d)从日期中提取具体天时间函数HQLDAY(时间字段)空的时候返回null
MONTH(d)从日期中提取具体月时间函数HQLMONTH(时间字段)空的时候返回null
YEAR(d)从日期中提取具体年时间函数HQLYEAR(时间字段)空的时候返回null
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()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: