Hibernate常用方法整理

HibernateTemplate提供非常多的常用方法來完成基本的操作,比如通常的增加、刪除、修改、查詢等操作,Spring 2.0更增加對命名SQL查詢的支持,也增加對分頁的支持。大部分情況下,使用Hibernate的常規用法,就可完成大多數DAO對象的CRUD操作。下面是HibernateTemplate的常用方法簡介:

q      void delete(Object entity):刪除指定持久化實例

q      deleteAll(Collection entities):刪除集合內全部持久化類實例

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):設置分頁的大小

下面是一個完整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");

    }

        

    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實現分頁  

Spring 整合 Hibernate 時候用的 HibernateTemplate 不支持分頁,因此需要自己包裝一個類進行分頁,具體實現如下...使用spring的hibernateTemplate的回調機制擴展hibernateTemplate的功能實現分頁

/*


/**
* 使用hql 語句進行操作

   * @param hql
* @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;
}
/**
* 使用criterion進行操作
* @param arg
* @param criterions
* @param offset
* @param length
* @return List
*/
protected List getListForPage(final Class arg, final Criterion[] criterions,final int offset, final int length) {

   List list = getHibernateTemplate().executeFind(new HibernateCallback() {
    public Object doInHibernate(Session session)
      throws HibernateException, SQLException {
     Criteria criteria = session.createCriteria(arg);
     //循環遍歷添加約束條件
     for (int i = 0; i < criterions.length; i++) {
      criteria.add(criterions[i]);
     }
     criteria.setFirstResult(offset);
     criteria.setMaxResults(length);
     return criteria.list();
    }
   });
   return list;




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