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;