hibernate 时间范围查询

需求

  • 查询某年、某月、某日数据信息

实现 (createTime时间为例)

  • sql实现方式:

    SELECT * FROM table WHERE ${开始时间}<=createTime<=${结束时间}

  • hql 实现方式:

    FROM tableEntity WHERE ${开始时间}<=createTime<=${结束时间}`

问题

  • 每次查询类似的时间维度数据,必须先找到这个时间维度的开始时间和结束时间,这个流程我是比较讨厌的。比如我要查询2016年到2017年数据,那么就需要找到2016年初的第一刻时间,到2016年最后时刻时间。虽然都会使用工具类处理,但是每次都这么写还算是比较崩溃,特别是查询这种数据一次性涉及的表比较多的情况。

相对好的解决方式

  • 搜索了不少博客,没有直接提到如何更好的书写这种查询,不过搜到了hql支持的一些函数Hibernate中HQL函数汇总及其说明,里面hql支持的函数还算是不少。其中主要关注到有时间提取的函数YEAR(d)、MONTH(d)、DAY(d)、HOUR(d)、MINUTE(d)、SECOND(d)…有这些就足够我们做一定时间维度的查询,具体函数意思可以参考博客。还是以2016至2017年时间数据为例,以上hql就可以修改为:

    FROM tableEntity WHERE YEAR(createTime) = 2016
  • 如果说要查询当前时间年月数据可修改为(其他类推):

    FROM tableEntity WHERE YEAR(createTime) = YEAR(#{当前时间}) AND MONTH(createTime) = MONTH(#{当前时间})

    如此就不需要每次都要先去通过工具类找到开始结束时间

最后

  • 感觉这种写法也不是特别好的处理,不知道还有没有更好的写法,这里先做记录。另外,我查了一下mysql也有该种函数,写生sql也可以参考hql查询时间维度。

你可能感兴趣的:(java)