HibernateTemplate用法與session的區別

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/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章