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查询时间维度。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

niubility锐

觉得有用的话鼓励鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值