HibernateTemplate的常用方法簡介:
q find(String queryString):根據HQL查詢字串來返回例項集合
q findByNamedQuery(String queryName):根據命名查詢返回例項集合
q get(Class entityClass, Serializable id):根據主鍵載入特定持久化類的例項
q save(Object entity):儲存新的例項
q saveOrUpdate(Object entity):根據例項狀態,選擇儲存或者更新
q update(Object entity):更新例項的狀態,要求entity是持久狀態
q setMaxResults(int maxResults):設定分頁的大小
1.使用getSession()方法你只要繼承 sessionFactory,而使用getHibernateTemplate()方法必須繼承HibernateDaoSupport當然包括 sessionFactory,這點區別都不是特別重要的,下面這些區別就很重要了
2.getSession()方法是沒有經過spring包裝 的,spring會把最原始的session給你,在使用完之後必須自己呼叫相應的close方法,而且也不會對宣告式事務進行相應的管理,一旦沒有及時 關閉連線,就會導致資料庫連線池的連線數溢位,getHibernateTemplate()方法是經過spring封裝的,例如新增相應的宣告式事務管 理,由spring管理相應的連線。
在實際的使用過程中發現的確getHibernateTemplate()比getSession()方法要好很多,但是有些方法在getHibernateTemplate()並沒有提供,這時我們用HibernateCallback 回撥的方法管理資料庫.
例如如下程式碼:
/**
* 使用 hql 語句進行操作
* @param hql HSQL 查詢語句(使用回撥函式訪問外部變數,必須是final的)
* @param offset 開始取資料的下標
* @param length 讀取資料記錄數
* @return List 結果集
*/
public List getListForPage ( final String hql , final int offset , final int length ) {
List list = getHibernateTemplate().executeFind ( new HibernateCallback ( ) {
public Object doInHibernate ( Session session ) throws HibernateException, SQLException {
Query query = session.createQuery ( hql ) ;
query.setFirstResult ( offset ) ;
query.setMaxResults ( length ) ;
List list = query.list ( ) ;
return list ;
}
}) ;
HibernateTemplate的常用方法簡介:
q find(String queryString):根據HQL查詢字串來返回例項集合
q findByNamedQuery(String queryName):根據命名查詢返回例項集合
q get(Class entityClass, Serializable id):根據主鍵載入特定持久化類的例項
q save(Object entity):儲存新的例項
q saveOrUpdate(Object entity):根據例項狀態,選擇儲存或者更新
q update(Object entity):更新例項的狀態,要求entity是持久狀態
q setMaxResults(int maxResults):設定分頁的大小
1.使用getSession()方法你只要繼承 sessionFactory,而使用getHibernateTemplate()方法必須繼承HibernateDaoSupport當然包括 sessionFactory,這點區別都不是特別重要的,下面這些區別就很重要了
2.getSession()方法是沒有經過spring包裝 的,spring會把最原始的session給你,在使用完之後必須自己呼叫相應的close方法,而且也不會對宣告式事務進行相應的管理,一旦沒有及時 關閉連線,就會導致資料庫連線池的連線數溢位,getHibernateTemplate()方法是經過spring封裝的,例如新增相應的宣告式事務管 理,由spring管理相應的連線。
在實際的使用過程中發現的確getHibernateTemplate()比getSession()方法要好很多,但是有些方法在getHibernateTemplate()並沒有提供,這時我們用HibernateCallback 回撥的方法管理資料庫.
例如如下程式碼:
/**
* 使用 hql 語句進行操作
* @param hql HSQL 查詢語句(使用回撥函式訪問外部變數,必須是final的)
* @param offset 開始取資料的下標
* @param length 讀取資料記錄數
* @return List 結果集
*/
public List getListForPage ( final String hql , final int offset , final int length ) {
List list = getHibernateTemplate().executeFind ( new HibernateCallback ( ) {
public Object doInHibernate ( Session session ) throws HibernateException, SQLException {
Query query = session.createQuery ( hql ) ;
query.setFirstResult ( offset ) ;
query.setMaxResults ( length ) ;
List list = query.list ( ) ;
return list ;
}
}) ;
return list ;
}