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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

DML风格的批量更新/删除

發布時間:2023/12/15 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DML风格的批量更新/删除 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Hibernate提供的HQL語句也支持批量的UPDATEDELETE語法。

批量UPDATE DELETE語句的語法格式如下:

  • UPDATE?|?DELETE?FROM??<ClassName>??[WHERE?WHERE_CONDITIONS]?
  • 關于上面的語法格式有如下4點值得注意:

    ?? FROM子句中,FROM關鍵字是可選的,即完全可以不寫FROM關鍵字。

    ?? FROM子句中只能有一個類名,該類名不能有別名。

    ?? 不能在批量HQL語句中使用連接,顯式或者隱式的都不行。但可以在WHERE子句中使用子查詢。

    ?? 整個WHERE子句是可選的。WHERE子句的語法和HQL語句中WHERE子句的語法完全相同。

    假設對于上面需要批量更改User類實例的name屬性,可以采用如下代碼片段完成。

    程序清單:codes\06\6.3\batchUpdate2\src\lee\UserManager.java

  • private?void?updateUsers()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(); ?
  • } ?
  • 從上面的代碼中可以看出,這種語法非常類似于PreparedStatementexecuteUpdate()語法,實際上,HQL的這種批量更新就是直接借鑒了SQL語法的UPDATE語句。

    注意:

    使用這種批量更新語法時,通常只需要執行一次SQLUPDATE語句,就可以完成所有滿足條件記錄的更新。但也可能需要執行多條UPDATE語句,這是因為有繼承映射等特殊情況,例如有一個Person實例,它有Customer子類實例。當批量更新Person實例時,也需要更新Customer實例。如果采用joined-subclassunion-subclass映射策略時,PersonCustomer實例保存在不同的表中,因此可能需要多條UPDATE語句。

    執行一個HQL DELETE,同樣使用 Query.executeUpdate() 方法,下面是一次刪除上面全部記錄的代碼片段。

    程序清單:codes\06\6.3\batchDelete\src\lee\UserManager.java

  • private?void?deleteUsers()throws?Exception ?
  • { ?
  • ????//打開Session ?
  • ????Session?session?=?HibernateUtil.currentSession(); ?
  • ????//開始事務 ?
  • ????Transaction?tx?=?session.beginTransaction(); ?
  • ????//定義批量刪除的HQL語句 ?
  • ????String?hqlDelete?=?"delete?User"; ?
  • ????//執行刪除 ?
  • ????int?deletedEntities?=?session.createQuery(?hqlDelete?) ?
  • ????????.executeUpdate(); ?
  • ????//提交事務 ?
  • ????tx.commit(); ?
  • ????HibernateUtil.closeSession(); ?
  • } ?
  • Query.executeUpdate()方法返回一個整型值,該值是受此操作影響的記錄數量。我們知道,Hibernate的底層操作實際上是由JDBC完成的,因此,如果有批量UPDATEDELETE操作被轉換成多條UPDATEDELETE語句,該方法將只能返回最后一條SQL語句影響的記錄行數。

    轉載于:https://blog.51cto.com/javaligang/912874

    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的DML风格的批量更新/删除的全部內容,希望文章能夠幫你解決所遇到的問題。

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