HibernateTemplate用法
HibernateTemplate提供非常多的常用方法來完成基本的操作,比如通常的增加、刪除、修改、查詢等操作,Spring 2.0更增加對命名SQL查詢的支持,也增加對分頁的支持。大部分情況下,使用Hibernate的常規用法,就可完成大多數DAO對象的CRUD操作。下面是HibernateTemplate的常用方法簡介:
◇ void delete(Object entity):刪除指定持久化實例
◇ deleteAll(Collection entities):刪除集合內全部持久化類實例
◇ find(String queryString):根據HQL查詢字符串來返回實例集合
◇ findByNamedQuery(String queryName):根據命名查詢返回實例集合
◇ get(Class entityClass, Serializable id):根據主鍵加載特定持久化類的實例
◇ save(Object entity):保存新的實例
◇ saveOrUpdate(Object entity):根據實例狀態,選擇保存或者更新
◇ update(Object entity):更新實例的狀態,要求entity是持久狀態
◇ setMaxResults(int maxResults):設置分頁的大小
下面是一個完整DAO類的源代碼:
public class PersonDAOHibernate implements PersonDAO
{
//採用log4j來完成調試時的日誌功能
private static Log log = LogFactory.getLog(NewsDAOHibernate.class);
//以私有的成員變量來保存SessionFactory。
private SessionFactory sessionFactory;
//以私有變量的方式保存HibernateTemplate
private HibernateTemplate hibernateTemplate = null;
//設值注入SessionFactory必需的setter方法
public void setSessionFactory(SessionFactory sessionFactory)
{
this.sessionFactory = sessionFactory;
}
//初始化本DAO所需的HibernateTemplate
public HIbernateTemplate getHibernateTemplate()
{
//首先,檢查原來的hibernateTemplate實例是否還存在
if ( hibernateTemplate == null)
{
//如果不存在,新建一個HibernateTemplate實例
hibernateTemplate = new HibernateTemplate(sessionFactory);
}
return hibernateTemplate;
}
//返回全部的人的實例
public List getPersons()
{
//通過HibernateTemplate的find方法返回Person的全部實例
return getHibernateTemplate().find("from Person");
}
/**
* 根據主鍵返回特定實例
* @ return 特定主鍵對應的Person實例
* @ param 主鍵值
*/
public News getNews(int personid)
{
return (Person)getHibernateTemplate().get(Person.class, new Integer(personid));
}
/**
* @ person 需要保存的Person實例
*/
public void savePerson(Person person)
{
getHibernateTemplate().saveOrUpdate(person);
}
/**
* @ param personid 需要刪除Person實例的主鍵
*/
public void removePerson(int personid)
{
//先加載特定實例
Object p = getHibernateTemplate().load(Person.class, new Integer(personid));
//刪除特定實例
getHibernateTemplate().delete(p);
}
}
HibernateTemplate與session的區別
使用方法沒有多大的區別
我們使用HibernateTemplate,有一個很重要的原因就在於我們不想直接控制事務,不想直接去獲取,打開Session,開始一個事務,處理異常,提交一個事務,最後關閉一個SessionHibernateTemplate 是Hibernate操作進行封裝,我們只要簡單的條用HibernateTemplate 對象,傳入hql和參數,就獲得查詢接口,至於事務的開啓,關閉,都交給HibernateTemplate 對象來處理我們自己只專注於業務,不想去作這些重複而繁瑣的操作。我們把這些責任全部委託給了 HibernateTemplate,然後使用聲明式的配置來實現這樣的功能。如果我們通過類似getSession()這樣的方法獲得了Session,那就意味着我們放棄了上面所說的一切好處。
在使用Spring的時候 DAO類繼承了 HibernateDaoSupport 類又因爲HibernateDaoSupport 類裏面有個屬性 hibernateTemplate;所以就可以進行設置注,也就是Spring的一大優點面向切面式編程,進行設置注入,在Tomcat啓動的時候由 Tomcat 加載 ApplicationContext.xml,配置文件給 hibernateTemplate賦值,這樣的話就實現了,在使用某個對象之前不用給他實例化
轉自:http://blog.163.com/zsq303288862@126/blog/static/9374596120111123576334/