1、hibetnateTemplate經常使用方法
一、delete(Object entity) 刪除指定的持久化實例
在程序中通常先用 Assert.notNull和 Assert.isTrue斷言entity是否爲空 和 entity的id是否大於0若
不然事務回滾。再用get(Class entityClass,Serializable id,LockMode lockMode)加鎖查詢出持久
化實例,通常用lockMode.update悲觀鎖,最後用delete(Object entity)來刪除此實例。
二、deleteAll(Collection entities) 刪除集合內所有持久化實例
entities必須爲持久化實例,不然報數據庫異常錯誤。
三、find(String queryString) 根據HQL查詢字符串來返回實例集合
find方法在執行時會先查找緩存,若是緩存找不到再查找數據庫,若是再找不到就會返回null。
四、get(Class entityClass,Serializable id)根據主鍵加載特定持久化實例
在程序中通常先用 Assert.isTrue斷言id是否大於0,若大於0繼續執行,若查到數據則返回實例,不然返回空
不一樣於load,load如有數據則返回實例,不然報出ObjectNotFoundEcception異常,相比來講get效率高些
五、save(Object entity) 保存新的實例
在程序中通常先用 Assert.notNull斷言實體是否爲空,在進行保存。
六、saveOrUpdate(Object entity)根據實例的狀態選擇保存或者是更新
此方法同時包含了save與update方法的功能,若是傳入的參數是臨時對象vo 沒有id,就調用save方法;若是傳
入的參數是遊離對象有id,就調用update()方法;若是傳入的參數是持久化對象po,就直接返回。
七、update(Object entity) 更新實例的狀態 實例必須爲持久化狀態
在程序中通常先用 Assert.notNull和 Assert.isTrue斷言entity是否爲空 和 entity的id是否大於0,
而後在更新實例,entity必須含有id不然不能更新。
八、Object execute(hibetnateCallback action)是HibernateCallback接口類。
當dao中的方法不能知足程序須要時能夠考慮用此方法。如:根據幾個不一樣參數須要返回惟一實體時用uniqueResult()返回。
HibernateCallback裏面定義了一個doInHibernate的方法,這個方法是可變的。若是要查找數據方法應該就
是:session.load()。刪除數據就是session.delete().這樣的話查詢數據庫的方法用execute方法。
九、bulkUpdate()經過語句直接增長、更新、刪除實體
通常有bulkUpdate(String sqlString) 和 bulkUpdate(String sqlString,Object[] object)兩個
方法,返回增長,更新,或者刪除的數量通常用於批量。
十、hibernate主鍵生成策略
(1)Assigned: 在插入數據的時候主鍵由用戶本身添加。如:<generator class="assigned"/>
(2)sequence: 調用數據庫的sequence來生成主鍵,要設定序列名,不然hibernate沒法找到。
如:<param name="sequence">ENTTY_NAME_SEQ</param>
(3)increment 插入數據的時候hibernate會給主鍵添加一個自增的主鍵,可是一個hibernate實例就維護一個計數器,
因此在多個實例運行的時候不能使用這個方法。
十一、實體對象的三種狀態
Session的生命週期綁定在一個物理的事務(tansaction)上面。
Session的主要功能是提供對映射的實體類實例的建立,讀取和刪除操做
(1)自由狀態(transient): 未曾進行持久化,未與任何Session相關聯
(2)持久化狀態(persistent): 僅與一個Session相關聯
持久化實例能夠經過調用 delete()變成遊離狀態。經過get()或load()方法獲得的實例都是持久化狀態的
(3)遊離狀態(detached): 已經進行過持久化,但當前未與任何Session相關聯
遊離狀態的實例能夠經過調用update(),lock(),replicate(),save(),persist()或者saveOrUpdate()方法進行持久化sql