getHibernateTemplate用法


前提條件:你的類必須繼承HibernateDaoSupport 
一: 
回調函數: 

Java代碼   收藏代碼
  1. public List getList(){  
  2.         return (List ) getHibernateTemplate().execute(  
  3.                 new HibernateCallback() {  
  4.                     public List doInHibernate(final Session s)  
  5.                             throws HibernateException, SQLException {  
  6.   
  7. StringBuffer sb = new StringBuffer();  
  8. Query query = s.createSQLQuery(sb.toString());//[b]執行普通sql[/b]  
  9. Query query = s.createQuery(sb.toString());//   [b]執行hql [/b]  
  10. List list = query.list();  
  11. return list ;  
  12.                     }  
  13.                 });           
  14.     }  


采用這種做法的好處是:不用關心事務。session的創建和銷毀,一切都在程序內部完成。看看名字doInHibernate就知道好處了。不好的是程序看起來比較亂!個人認為。 
二: 

Java代碼   收藏代碼
  1. getHibernateTemplate().find():  
  2. ist list = getHibernateTemplate().find(String sql ):  


這種的前提是sql必須是hql ,原始sql 不能執行。 

三: 
自己獲取session處理。 
獲取session的兩種方式:this.getSession();和this.getHibernateTemplate().getSessionFactory().openSession(); 
獲取session以后再createQuery操作就一樣了。但是這種做法,是需要自己去手動關閉session的。所以你需要配置openSessioninview,個人認為不推薦使用! 

其他: 
getHibernateTemplate.delete(Object); 

getHibernateTemplate.save(Object); 
getHibernateTemplate.update(Object); 

總結:推薦使用回調函數。 

 

補充百科:

Spring的Hibernate ORM  框架帶來了方便的HibernateDaoSupport類,你的 DAO類可以繼承它:
public class StudentDaoHibernate extends HibernateDaoSupport implements StudentDao{
.................
}
如果你選擇這種設計,就需要動態注入 SessionFactory而HibernateDaoSupport包含這個屬性.這個類提供了一個方便的方法getHibernateTemplate(); 就能得到 HibernateTemplate的一個實例.它也有getSession()和releaseSession,以便於你應為某些原因而不使用HibernateTempate的情況下執行 Hibernate操作。
HibernateDaoSupport提供了基於 AOP 事務的自動處理, 程序員完全可以不用理會事務的開始與提交。在 JDBC中一個 Connection對象使用一個事務,那么在Hibernate中一個事務肯定要關聯一個 SessionFactory了,然而這個SessionFactory卻沒有在 DAO中體現。其實主要的原因是HibernateDaoSupport類已經默默地做了封裝的工作,它用一個setSessionFactory方法將SessionFactory進行注入,所以繼承自HibernateDaoSupport類的DAO都會具有SessionFactory的屬性,從而可以通過SessionFactory創建 Session實例操作數據庫。
在繼承HibrnateDaoSupport的 DAO實現里,Hibernate Session的管理完全不需要 Hibernate代碼打開,而由 Spring來管理。Spring會根據實際的操作,采用“每次 事務打開一次 session”的策略,自動提高數據庫訪問的性能。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM