日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hibernate-HQL

發布時間:2024/9/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hibernate-HQL 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?User u = (User) users.get(0);???????? u.setName("新用戶名" + count);???????? //當count為20的倍數時,將更新的結果從Session中flush到數據庫???????? if ( ++count % 20 == 0 )???????? {???????????? session.flush();???????????? session.clear();???????? }???? }???? tx.commit();???? HibernateUtil.closeSession(); } 通過這種方式,雖然可以執行批量更新,但效果非常不好。執行效率不高,而且需要先執行數據查詢,然后再執行數據更新,并且這種更新將是逐行更新,即每更新一行記錄,都需要執行一條update語句,性能非常低下。為了避免這種情況,Hibernate提供了一種類似于SQL的批量更新和批量刪除的HQL語法。 4.2.3??SQL風格的批量更新/刪除 Hibernate提供的HQL語句也支持批量的UPDATE和DELETE語法。批量UPDATE和DELETE語句的語法格式如下: UPDATE | DELETE FROM? ClassName??[WHERE WHERE_CONDITIONS] 關于上面的語法格式有以下四點值得注意:?? ● 在FROM子句中,FROM關鍵字是可選的。即完全可以不寫FROM關鍵字。?? ● 在FROM子句中只能有一個類名,該類名不能有別名。?? ● 不能在批量HQL語句中使用連接,顯式的或隱式的都不行。但可以在WHERE子句中使用子查詢。?? ● 整個WHERE子句是可選的。 假設,需要批量更改User類實例的name屬性,可以采用如下代碼片段完成: private void testUser()throws Exception {???? //打開Session???? Session session = HibernateUtil.currentSession();???? //開始事務???? Transaction tx = session.beginTransaction();???? //定義批量更新的HQL語句???? String hqlUpdate = "update User set name = :newName";???? //執行更新???? int updatedEntities = session.createQuery( hqlUpdate )????????????????????????????.setString( "newName", "新名字" )????????????????????????????.executeUpdate();???? //提交事務???? tx.commit();???? HibernateUtil.closeSession(); } 從上面代碼中可以看出,這種語法非常類似于PreparedStatement的executeUpdate語法。實際上,HQL的這種批量更新就是直接借鑒了SQL語法的UPDATE語句。注意:使用這種批量更新語法時,通常只需要執行一次SQL的UPDATE語句,就可以完成所有滿足條件記錄的更新。但也可能需要執行多條UPDATE語句,這是因為有繼承映射等特殊情況,例如有一個Person實例,它有Customer的子類實例。當批量更新Person實例時,也需要更新Customer實例。如果采用joined-subclass或union-subclass映射策略,Person和Customer實例保存在不同的表中,因此可能需要多條UPDATE語句。執行一個HQL DELETE,同樣使用 Query.executeUpdate() 方法,下面是一次刪除上面全部記錄的代碼片段: private void testUser()throws Exception {???? //打開Session實例???? Session session = HibernateUtil.currentSession();???? //開始事務???? Transaction tx = session.beginTransaction();???? //定義批量刪除的HQL語句???? String hqlUpdate = "delete User";???? //執行批量刪除???? int updatedEntities = session.createQuery( hqlUpdate )????????????????????????????.executeUpdate();???? //提交事務???? tx.commit();???? //關閉Session???? HibernateUtil.closeSession(); } 由Query.executeUpdate()方法返回一個整型值,該值是受此操作影響的記錄數量。實際上,Hibernate的底層操作是通過JDBC完成的。因此,如果有批量的UPDATE或DELETE操作被轉換成多條UPDATE或DELETE語句,該方法返回的是最后一條SQL語句影響的記錄行數。 4.3??使用HQL查詢 Hibernate提供了異常強大的查詢體系,使用Hibernate有多種查詢方式。可以選擇使用Hibernate的HQL查詢,或者使用條件查詢,甚至可以使用原生的SQL查詢語句,此外還提供了一種數據過濾功能,這些都可用于篩選目標數據。下面分別介紹Hibernate的4種數據篩選方法: 4.3.1??HQL查詢 HQL是Hibernate Query Language的縮寫,HQL的語法很像SQL的語法,但HQL是一種面向對象的查詢語言。因此,SQL的操作對象是數據表和列等數據對象,而HQL的操作對象是類、實例、屬性等。 HQL是完全面向對象的查詢語言,因此可以支持繼承和多態等特征。 HQL查詢依賴于Query類,每個Query實例對應一個查詢對象。使用HQL查詢可按如下步驟進行:(1)獲取Hibernate Session對象;(2)編寫HQL語句;(3)以HQL語句作為參數,調用Session的createQuery方法創建查詢對象;(4)如果HQL語句包含參數,調用Query的setXxx方法為參數賦值;(5)調用Query對象的list等方法遍歷查詢結果。看下面的查詢示例: public class HqlQuery {???? public static void main(String[] args)throws Exception???? {???????? HqlQuery mgr = new HqlQuery();???????? //調用查詢方法???????? mgr.findPersons();???????? //調用第二個查詢方法???????? mgr.findPersonsByHappenDate();???????? HibernateUtil.sessionFactory.close();???? }???? //第一個查詢方法???? private void findPersons()???? {???????? //獲得Hibernate Session???????? Session sess = HibernateUtil.currentSession();???????? //開始事務???????? Transaction tx = sess.beginTransaction();???????? //以HQL語句創建Query對象.???????? //執行setString方法為HQL語句的參數賦值???????? //Query調用list方法訪問查詢的全部實例???????? List pl = sess.createQuery("from Person p where p.myEvents.title???????? = :eventTitle")???????????????????????? .setString("eventTitle","很普通事情")???????????????????????? .list();???????? //遍歷查詢的全部結果???????? for (Iterator pit = pl.iterator() ; pit.hasNext(); )???????? {???????????? Person p = ( Person )pit.next();???????????? System.out.println(p.getName());???????? }

總結

以上是生活随笔為你收集整理的Hibernate-HQL的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚州精品毛片 | 天天摸夜夜操 | 国产成人久久久 | 亚洲一区二区三区蜜桃 | 一区二区三区四区在线视频 | 国产成人精品女人久久久 | 顶级毛茸茸aaahd极品 | 香蕉毛片| 久久久视频在线观看 | 国精产品一区一区三区有限公司杨 | xxx毛片| 玖玖视频| 中文有码一区 | 99热这里只有精品在线 | 午夜在线观看视频18 | 男女拍拍拍 | 亚洲欧美色图片 | www.夜夜骑 | 鲁一鲁色一色 | 韩国精品一区二区 | 久久黄色大片 | 国产每日更新 | 欧美日韩一区二区三区在线 | 黄色日韩网站 | 美女扒开腿让男人操 | 欧美大尺度床戏做爰 | 手机看黄色 | 青青射 | 懂色av蜜臀av粉嫩av分享吧 | 三年中文免费观看大全动漫 | av毛片精品| 人妖av在线| 国产综合亚洲精品一区二 | 日韩在线一区二区三区 | 韩日av| 91精品人妻一区二区三区 | 亚洲一区精品在线观看 | 男人和女人做爽爽视频 | 日韩在线视| 欧美啊v | 亚洲人高潮女人毛茸茸 | 欧美一区免费观看 | 青草久久久久 | 永久毛片| 成人免费视 | 免费看片视频 | 午夜国产小视频 | h片观看| 中国av一区 | 黄色网页在线播放 | 天堂久久网 | 中文人妻熟妇乱又伦精品 | 国产区一区二区三区 | 成人欧美一区二区三区黑人 | 国产精品人人做人人爽人人添 | 国产视频你懂的 | 亚洲一区二区在线电影 | 日日摸日日添日日碰9学生露脸 | 国产又色又爽无遮挡免费动态图 | 日韩黄色成人 | 风间由美一区二区 | 成人亚洲一区二区 | 三级av免费看 | 91亚色视频在线观看 | 久久久综合色 | 91喷水 | 日韩欧美不卡在线 | 一区二区三区在线视频播放 | 黑人精品无码一区二区三区AV | 国产男女猛烈无遮挡 | 国产又粗又黄的视频 | 亚洲精品高清无码视频 | 亚洲中文无码av在线 | 女人扒开双腿让男人捅 | 亚洲大片 | 涩涩网站免费 | 综合精品在线 | 蜜臀av性久久久久蜜臀aⅴ麻豆 | 九九视屏 | 黄色片在线免费观看 | 欧美成人一区在线 | 少妇又色又紧又爽又刺激视频 | 亚洲av无码片一区二区三区 | 日产精品久久久久久久 | 99国产精品久久久久久久成人 | 日韩欧美高清 | 久久久久亚洲日日精品 | 求av网站 | 中文一二三区 | 日干夜操 | 99热18| 国产91啪 | 日本午夜一区 | 玉女心经是什么意思 | 免费吃奶摸下激烈视频 | 男人天堂手机在线观看 | 日韩在线中文字幕视频 | 男女偷爱性视频刺激 | 日本a视频 |