hibernate 常用方法介紹
更新時(shí)間:2013年09月22日 15:05:44 作者:
這篇文章介紹了hibernate的常用方法,有需要的朋友可以參考一下
一、hibetnateTemplate常用方法
1、delete(Object entity) 刪除指定的持久化實(shí)例
在程序中一般先用 Assert.notNull和 Assert.isTrue斷言entity是否為空 和 entity的id是否大于0若
否則事務(wù)回滾。再用get(Class entityClass,Serializable id,LockMode lockMode)加鎖查詢出持久
化實(shí)例,一般用lockMode.update悲觀鎖,最后用delete(Object entity)來(lái)刪除此實(shí)例。
2、deleteAll(Collection entities) 刪除集合內(nèi)全部持久化實(shí)例
entities必須為持久化實(shí)例,否則報(bào)數(shù)據(jù)庫(kù)異常錯(cuò)誤。
3、find(String queryString) 根據(jù)HQL查詢字符串來(lái)返回實(shí)例集合
find方法在執(zhí)行時(shí)會(huì)先查找緩存,如果緩存找不到再查找數(shù)據(jù)庫(kù),如果再找不到就會(huì)返回null。
4、get(Class entityClass,Serializable id)根據(jù)主鍵加載特定持久化實(shí)例
在程序中一般先用 Assert.isTrue斷言id是否大于0,若大于0繼續(xù)執(zhí)行,若查到數(shù)據(jù)則返回實(shí)例,否則返回空
不同于load,load若有數(shù)據(jù)則返回實(shí)例,否則報(bào)出ObjectNotFoundEcception異常,相比來(lái)說(shuō)get效率高些
5、save(Object entity) 保存新的實(shí)例
在程序中一般先用 Assert.notNull斷言實(shí)體是否為空,在進(jìn)行保存。
6、saveOrUpdate(Object entity)根據(jù)實(shí)例的狀態(tài)選擇保存或者是更新
此方法同時(shí)包含了save與update方法的功能,如果傳入的參數(shù)是臨時(shí)對(duì)象vo 沒有id,就調(diào)用save方法;如果傳
入的參數(shù)是游離對(duì)象有id,就調(diào)用update()方法;如果傳入的參數(shù)是持久化對(duì)象po,就直接返回。
7、update(Object entity) 更新實(shí)例的狀態(tài) 實(shí)例必須為持久化狀態(tài)
在程序中一般先用 Assert.notNull和 Assert.isTrue斷言entity是否為空 和 entity的id是否大于0,
然后在更新實(shí)例,entity必須含有id否則不能更新。
8、Object execute(hibetnateCallback action)是HibernateCallback接口類。
當(dāng)dao中的方法不能滿足程序需要時(shí)可以考慮用此方法。如:根據(jù)幾個(gè)不同參數(shù)需要返回唯一實(shí)體時(shí)用uniqueResult()返回。
HibernateCallback里面定義了一個(gè)doInHibernate的方法,這個(gè)方法是可變的。如果要查找數(shù)據(jù)方法應(yīng)該就
是:session.load()。刪除數(shù)據(jù)就是session.delete().這樣的話查詢數(shù)據(jù)庫(kù)的方法用execute方法。
9、bulkUpdate()通過(guò)語(yǔ)句直接增加、更新、刪除實(shí)體
一般有bulkUpdate(String sqlString) 和 bulkUpdate(String sqlString,Object[] object)兩個(gè)
方法,返回增加,更新,或者刪除的數(shù)量一般用于批量。
10、hibernate主鍵生成策略
(1)Assigned: 在插入數(shù)據(jù)的時(shí)候主鍵由用戶自己添加。如:<generator class="assigned"/>
(2)sequence: 調(diào)用數(shù)據(jù)庫(kù)的sequence來(lái)生成主鍵,要設(shè)定序列名,否則hibernate無(wú)法找到。
如:<param name="sequence">ENTTY_NAME_SEQ</param>
(3)increment 插入數(shù)據(jù)的時(shí)候hibernate會(huì)給主鍵添加一個(gè)自增的主鍵,但是一個(gè)hibernate實(shí)例就維護(hù)一個(gè)計(jì)數(shù)器,
所以在多個(gè)實(shí)例運(yùn)行的時(shí)候不能使用這個(gè)方法。
11、實(shí)體對(duì)象的三種狀態(tài)
Session的生命周期綁定在一個(gè)物理的事務(wù)(tansaction)上面。
Session的主要功能是提供對(duì)映射的實(shí)體類實(shí)例的創(chuàng)建,讀取和刪除操作
(1)自由狀態(tài)(transient): 不曾進(jìn)行持久化,未與任何Session相關(guān)聯(lián)
(2)持久化狀態(tài)(persistent): 僅與一個(gè)Session相關(guān)聯(lián)
持久化實(shí)例可以通過(guò)調(diào)用 delete()變成游離狀態(tài)。通過(guò)get()或load()方法得到的實(shí)例都是持久化狀態(tài)的
(3)游離狀態(tài)(detached): 已經(jīng)進(jìn)行過(guò)持久化,但當(dāng)前未與任何Session相關(guān)聯(lián)
游離狀態(tài)的實(shí)例可以通過(guò)調(diào)用update(),lock(),replicate(),save(),persist()或者saveOrUpdate()方法進(jìn)行持久化
1、delete(Object entity) 刪除指定的持久化實(shí)例
在程序中一般先用 Assert.notNull和 Assert.isTrue斷言entity是否為空 和 entity的id是否大于0若
否則事務(wù)回滾。再用get(Class entityClass,Serializable id,LockMode lockMode)加鎖查詢出持久
化實(shí)例,一般用lockMode.update悲觀鎖,最后用delete(Object entity)來(lái)刪除此實(shí)例。
2、deleteAll(Collection entities) 刪除集合內(nèi)全部持久化實(shí)例
entities必須為持久化實(shí)例,否則報(bào)數(shù)據(jù)庫(kù)異常錯(cuò)誤。
3、find(String queryString) 根據(jù)HQL查詢字符串來(lái)返回實(shí)例集合
find方法在執(zhí)行時(shí)會(huì)先查找緩存,如果緩存找不到再查找數(shù)據(jù)庫(kù),如果再找不到就會(huì)返回null。
4、get(Class entityClass,Serializable id)根據(jù)主鍵加載特定持久化實(shí)例
在程序中一般先用 Assert.isTrue斷言id是否大于0,若大于0繼續(xù)執(zhí)行,若查到數(shù)據(jù)則返回實(shí)例,否則返回空
不同于load,load若有數(shù)據(jù)則返回實(shí)例,否則報(bào)出ObjectNotFoundEcception異常,相比來(lái)說(shuō)get效率高些
5、save(Object entity) 保存新的實(shí)例
在程序中一般先用 Assert.notNull斷言實(shí)體是否為空,在進(jìn)行保存。
6、saveOrUpdate(Object entity)根據(jù)實(shí)例的狀態(tài)選擇保存或者是更新
此方法同時(shí)包含了save與update方法的功能,如果傳入的參數(shù)是臨時(shí)對(duì)象vo 沒有id,就調(diào)用save方法;如果傳
入的參數(shù)是游離對(duì)象有id,就調(diào)用update()方法;如果傳入的參數(shù)是持久化對(duì)象po,就直接返回。
7、update(Object entity) 更新實(shí)例的狀態(tài) 實(shí)例必須為持久化狀態(tài)
在程序中一般先用 Assert.notNull和 Assert.isTrue斷言entity是否為空 和 entity的id是否大于0,
然后在更新實(shí)例,entity必須含有id否則不能更新。
8、Object execute(hibetnateCallback action)是HibernateCallback接口類。
當(dāng)dao中的方法不能滿足程序需要時(shí)可以考慮用此方法。如:根據(jù)幾個(gè)不同參數(shù)需要返回唯一實(shí)體時(shí)用uniqueResult()返回。
HibernateCallback里面定義了一個(gè)doInHibernate的方法,這個(gè)方法是可變的。如果要查找數(shù)據(jù)方法應(yīng)該就
是:session.load()。刪除數(shù)據(jù)就是session.delete().這樣的話查詢數(shù)據(jù)庫(kù)的方法用execute方法。
9、bulkUpdate()通過(guò)語(yǔ)句直接增加、更新、刪除實(shí)體
一般有bulkUpdate(String sqlString) 和 bulkUpdate(String sqlString,Object[] object)兩個(gè)
方法,返回增加,更新,或者刪除的數(shù)量一般用于批量。
10、hibernate主鍵生成策略
(1)Assigned: 在插入數(shù)據(jù)的時(shí)候主鍵由用戶自己添加。如:<generator class="assigned"/>
(2)sequence: 調(diào)用數(shù)據(jù)庫(kù)的sequence來(lái)生成主鍵,要設(shè)定序列名,否則hibernate無(wú)法找到。
如:<param name="sequence">ENTTY_NAME_SEQ</param>
(3)increment 插入數(shù)據(jù)的時(shí)候hibernate會(huì)給主鍵添加一個(gè)自增的主鍵,但是一個(gè)hibernate實(shí)例就維護(hù)一個(gè)計(jì)數(shù)器,
所以在多個(gè)實(shí)例運(yùn)行的時(shí)候不能使用這個(gè)方法。
11、實(shí)體對(duì)象的三種狀態(tài)
Session的生命周期綁定在一個(gè)物理的事務(wù)(tansaction)上面。
Session的主要功能是提供對(duì)映射的實(shí)體類實(shí)例的創(chuàng)建,讀取和刪除操作
(1)自由狀態(tài)(transient): 不曾進(jìn)行持久化,未與任何Session相關(guān)聯(lián)
(2)持久化狀態(tài)(persistent): 僅與一個(gè)Session相關(guān)聯(lián)
持久化實(shí)例可以通過(guò)調(diào)用 delete()變成游離狀態(tài)。通過(guò)get()或load()方法得到的實(shí)例都是持久化狀態(tài)的
(3)游離狀態(tài)(detached): 已經(jīng)進(jìn)行過(guò)持久化,但當(dāng)前未與任何Session相關(guān)聯(lián)
游離狀態(tài)的實(shí)例可以通過(guò)調(diào)用update(),lock(),replicate(),save(),persist()或者saveOrUpdate()方法進(jìn)行持久化
您可能感興趣的文章:
- java面試常見問(wèn)題之Hibernate總結(jié)
- 深入理解Hibernate中的flush機(jī)制
- Hibernate管理Session和批量操作分析
- 淺析java程序中hibernate的應(yīng)用總結(jié)
- 關(guān)于Hibernate的一些學(xué)習(xí)心得總結(jié)
- 基于spring+hibernate+JQuery開發(fā)之電子相冊(cè)(附源碼下載)
- hibernate 命名查詢?nèi)绾螌?shí)現(xiàn)
- 解決hibernate+mysql寫入數(shù)據(jù)庫(kù)亂碼
- Hibernate Oracle sequence的使用技巧
- 簡(jiǎn)單的手工hibernate程序示例
相關(guān)文章
Java 中橋接模式——對(duì)象結(jié)構(gòu)型模式的實(shí)例詳解
這篇文章主要介紹了Java 中橋接模式——對(duì)象結(jié)構(gòu)型模式的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文大家能掌握這部分知識(shí),需要的朋友可以參考下2017-09-09
Java并發(fā)編程示例(七):守護(hù)線程的創(chuàng)建和運(yùn)行
這篇文章主要介紹了Java并發(fā)編程示例(七):守護(hù)線程的創(chuàng)建和運(yùn)行,在本節(jié)示例中,我們將創(chuàng)建兩個(gè)線程,一個(gè)是普通線程,向隊(duì)列中寫入事件,另外一個(gè)是守護(hù)線程,清除隊(duì)列中的事件,需要的朋友可以參考下2014-12-12
Spring Security源碼解析之權(quán)限訪問(wèn)控制是如何做到的
Spring Security 中對(duì)于權(quán)限控制默認(rèn)已經(jīng)提供了很多了,但是,一個(gè)優(yōu)秀的框架必須具備良好的擴(kuò)展性,下面小編給大家介紹Spring Security源碼解析之權(quán)限訪問(wèn)控制是如何做到的,感興趣的朋友跟隨小編一起看看吧2021-05-05
nacos在mac上部署提示找不到或無(wú)法加載主類的解決
這篇文章主要介紹了nacos在mac上部署提示找不到或無(wú)法加載主類的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06
快速解決springboot在yml配置了啟動(dòng)端口但啟動(dòng)還是8080問(wèn)題
這篇文章主要介紹了快速解決springboot在yml配置了啟動(dòng)端口但啟動(dòng)還是8080問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-03-03
Spring?AOP利用切面實(shí)現(xiàn)日志保存的示例詳解
最近領(lǐng)導(dǎo)讓寫個(gè)用切面實(shí)現(xiàn)日志保存,經(jīng)過(guò)調(diào)研和親測(cè),以完美解決。在這里分享給大家,給有需要的碼友直接使用,希望對(duì)大家有所幫助2022-11-11
SpringBoot?Redis清除所有的key的實(shí)現(xiàn)方法
本文主要介紹了SpringBoot?Redis清除所有的key的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05
springboot+thymeleaf整合阿里云OOS對(duì)象存儲(chǔ)圖片的實(shí)現(xiàn)
本文主要介紹了springboot+thymeleaf整合阿里云OOS對(duì)象存儲(chǔ)圖片的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05

