hibernate 時間範圍查詢
阿新 • • 發佈:2018-12-24
需求
- 查詢某年、某月、某日資料資訊
實現 (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查詢時間維度。