Hibernate字段比較時間以及實現(xiàn)limit操作

最近在做業(yè)務(wù)開發(fā)的時候需要對數(shù)據(jù)庫進行索引操作,主要實現(xiàn)的是根據(jù)時間字段取出最近一個月登錄的數(shù)據(jù)丽惶,并且限制取出的數(shù)量缅阳。本來使用原生的SQL語句是非常容易實現(xiàn)的,可是項目使用的是Hibernate音羞,Hibernate對數(shù)據(jù)庫的操作使用的是HQL囱桨,是一種面向?qū)ο蟮牟樵冋Z言,類似于 SQL嗅绰,但不是去對表和列進行操作舍肠,而是面向?qū)ο蠛退鼈兊膶傩浴?HQL 查詢被 Hibernate 翻譯為傳統(tǒng)的 SQL 查詢從而對數(shù)據(jù)庫進行操作。

在下使用Java時間還不是很長窘面,對Hibernate還不是很熟悉翠语,結(jié)果發(fā)現(xiàn)原生的SQL語句Hibernate是不完全支持的,所以在此記錄下這個過程财边。

1肌括、sql語句時間比較和數(shù)量限制

先來復(fù)習(xí)一下sql語句實現(xiàn)的方法,假設(shè)數(shù)據(jù)庫的playerent表和playerstat通過guid字段主外健關(guān)聯(lián)酣难,其中playerstat表有字段lastlogintime記錄上次登錄時間谍夭,java定義的類為Date,持久化到 數(shù)據(jù)庫后的數(shù)據(jù)格式為:‘2017-07-22 14:22:12’憨募。

要實現(xiàn)判斷最近一個月的區(qū)間有兩種方法慧库,一是可以直接計算出當前的時間,以及一個月前的時間馋嗜,然后直接判斷即可齐板;第二種可以使用mysql提供的DATE_SUB()函數(shù),DATE_SUB()的文檔描述為:

定義和用法:
DATE_SUB() 函數(shù)從日期減去指定的時間間隔葛菇。

DATE_SUB(date,INTERVAL expr type)
date 參數(shù)是合法的日期表達式甘磨。expr 參數(shù)是您希望添加的時間間隔。

其中type有以下常用的可選(文檔地址:http://www.w3school.com.cn/sql/func_date_sub.asp):

MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
...

最終實現(xiàn)的sql語句為:

SELECT ent.guid FROM playerent ent, playerstat stat 
WHERE ent.guid = stat.guid
AND DATE_SUB(CURDATE(), INTERVAL 30 DAY) <= stat.lastlogintime
LIMIT 1000

其中CURDATE()為mysql獲取當前時間的函數(shù)眯停。

2济舆、Hibernate的實現(xiàn)

其實Hibernate要是直接支持mysql的日期操作函數(shù)上面的語句其實可以直接就用了,既然不支持就要看看Hibernate是怎么做日期的操作的莺债。

關(guān)于hql的知識這里就不展開說了滋觉,大家可以網(wǎng)上找找相關(guān)資料,下圖是Hibernate的架構(gòu)圖齐邦,大家可以看看這里相關(guān)介紹:http://wiki.jikexueyuan.com/project/hibernate/architecture.html

Hibernate架構(gòu)圖.png

首先先建立查詢的hql語句:

SELECT ent.guid FROM PlayerEnt ent, PlayerStat stat 
WHERE ent.guid = stat.guid
AND stat.lastlogintime >=:beginDate AND stat.lastlogintime < :endDate

可以看到查詢語句不會直接查詢數(shù)據(jù)庫的表了椎侠,而是查詢Java的對象,關(guān)于Hibernate這方面的知識在下后面再整理一篇博文出來措拇,這里先講述本文的主題我纪。

下面是Hibernate實現(xiàn)的代碼:

String hql = "SELECT ent.guid FROM PlayerEnt ent, PlayerStat stat 
WHERE ent.guid = stat.guid
AND stat.lastlogintime >=:beginDate AND stat.lastlogintime < :endDate";
Query query = session.createQuery(hql);

query.setDate("beginDate", beginDate);
query.setDate("endDate", endDate);

query.setMaxResults(1000);
List<Long> list = query.list();

簡單解釋一下上面的代碼,session是Hibernate的會話,通過傳進來的hql字符串session可以創(chuàng)建一個查詢浅悉,hql語句可以通過參數(shù)綁定引用占位符趟据,“:beginDate”和“:endDate”就是上面的引用占位符,然后通過Query可以將hql語句的參數(shù)補全术健,最后使用query.setMaxResults(1000) 限制查詢數(shù)量汹碱,這里可以指定區(qū)間,配合setFirstResult方法荞估。

以上內(nèi)容就是使用Hibernate字段比較時間以及實現(xiàn)limit操作咳促,只是記錄下一些操作,權(quán)當筆記泼舱,說不定也有跟在下一樣剛?cè)胧謏ava的朋友也會遇到同樣的問題等缀,這里可以提供一些參考。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末娇昙,一起剝皮案震驚了整個濱河市尺迂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌冒掌,老刑警劉巖噪裕,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異股毫,居然都是意外死亡膳音,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進店門铃诬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來祭陷,“玉大人,你說我怎么就攤上這事趣席”荆” “怎么了?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵宣肚,是天一觀的道長想罕。 經(jīng)常有香客問我,道長霉涨,這世上最難降的妖魔是什么按价? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮笙瑟,結(jié)果婚禮上楼镐,老公的妹妹穿的比我還像新娘。我一直安慰自己逮走,他們只是感情好鸠蚪,可當我...
    茶點故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布今阳。 她就那樣靜靜地躺著师溅,像睡著了一般茅信。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上墓臭,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天蘸鲸,我揣著相機與錄音,去河邊找鬼窿锉。 笑死酌摇,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的嗡载。 我是一名探鬼主播窑多,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼洼滚!你這毒婦竟也來了埂息?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤遥巴,失蹤者是張志新(化名)和其女友劉穎千康,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體铲掐,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡拾弃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了摆霉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片豪椿。...
    茶點故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖携栋,靈堂內(nèi)的尸體忽然破棺而出搭盾,到底是詐尸還是另有隱情,我是刑警寧澤刻两,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布增蹭,位于F島的核電站,受9級特大地震影響磅摹,放射性物質(zhì)發(fā)生泄漏滋迈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一户誓、第九天 我趴在偏房一處隱蔽的房頂上張望饼灿。 院中可真熱鬧,春花似錦帝美、人聲如沸碍彭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽庇忌。三九已至舞箍,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間皆疹,已是汗流浹背疏橄。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留略就,地道東北人捎迫。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像表牢,于是被迫代替她去往敵國和親窄绒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,585評論 2 359

推薦閱讀更多精彩內(nèi)容

  • Hibernate: 一個持久化框架 一個ORM框架 加載:根據(jù)特定的OID,把一個對象從數(shù)據(jù)庫加載到內(nèi)存中OID...
    JHMichael閱讀 1,979評論 0 27
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法崔兴,類相關(guān)的語法彰导,內(nèi)部類的語法,繼承相關(guān)的語法恼布,異常的語法螺戳,線程的語...
    子非魚_t_閱讀 31,664評論 18 399
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 3,814評論 0 11
  • 本文中我們介紹并比較兩種最流行的開源持久框架:iBATIS和Hibernate倔幼,我們還會討論到Java Persi...
    大同若魚閱讀 4,315評論 4 27
  • 母親應(yīng)該避免的做法 (1)把自己婚姻生活失敗的原因歸咎于孩子或借孩子來報復(fù)對方 把自己婚姻生活失敗的原因歸咎于孩子...
    先姐筆耕閱讀 339評論 0 1