完整的Spring+Hibernate+DWR+extJs的生成树及下拉comBoboxTree

[quote="wxc2100"]谢谢楼主回复!本人初学,还有一个问题呀:
public class RegionDAOImpl extends GenericHibernateDAOCrud<Region> implements IRegionDAO {
中的GenericHibernateDAOCrud在那里呀!谢谢了![/quote]


GenericHibernateDAOCrud 这个类可以提供给你。它在DAO层对Hibernate增、删、改、查的基类支持。也就是我文章中提到的DAO模式。


package com.ssgly.dao;


import java.io.Serializable;
import java.lang.reflect.Field;
import java.sql.SQLException;
import java.util.*;

import com.ssgly.model.*;

import org.apache.commons.logging.*;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Projections;
import org.springframework.dao.DataRetrievalFailureException;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.HibernateTemplate;

/**
* This base class is prepared for subclass to do CRUD easily.
*
* @author Tiger
*/
public abstract class GenericHibernateDAOCrud<T> {

protected static final Object[] EMPTY_OBJECT_ARRAY = new Object[] {};

protected Log log = LogFactory.getLog(getClass());

private final Class<T> clazz;
protected HibernateTemplate hibernateTemplate;

/**
* Inject domain's class type in constructor.
*
* @param clazz Domain's class.
*/
public GenericHibernateDAOCrud(Class<T> clazz) {
this.clazz = clazz;
}

/**
* @spring.property name="hibernateTemplate" ref="hibernateTemplate"
*/
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}

@SuppressWarnings("unchecked")
public T query(Serializable id) {
T t = (T)hibernateTemplate.get(clazz, id);
if(t==null)
throw new DataRetrievalFailureException("Object not found.");
// it is strange that load() method return a lazy-loading proxy object
// and it may cause LazyInitializationException!
return t;
}

/**
* Default implementation of creating new domain object.
*/
public void create(T t) {
hibernateTemplate.save(t);
}

/**
* Default implementation of deleting new domain object.
*/
public void delete(T t) {
hibernateTemplate.delete(t);
}

/**
* Default implementation of updating domain object.
*/
public void update(T t) {
hibernateTemplate.update(t);
}

/**
* Do an update hql query, return the affected rows.
*
* @param updateHql Update HQL.
* @param values Parameters or null if none.
* @return The affected rows.
*/
protected int executeUpdate(final String updateHql, final Object[] values) {
HibernateCallback updateCallback = new HibernateCallback() {
public Object doInHibernate(Session session) throws HibernateException, SQLException {
Query query = session.createQuery(updateHql);
if(values!=null) {
for(int i=0; i<values.length; i++)
query.setParameter(i, values[i]);
}
return new Integer(query.executeUpdate());
}
};
return ((Integer)hibernateTemplate.execute(updateCallback)).intValue();
}

/**
* Prepared for sub-class for convenience. Query for list and also return
* total results' number.
*
* @param selectCount HQL for "select count(*) from ..." and should return a Long.
* @param select HQL for "select * from ..." and should return object list.
* @param values For prepared statements.
* @param page Page object for store page information.
*/
protected List queryForList(final String selectCount, final String select, final Object[] values, final Page page) {
Long count = (Long)queryForObject(selectCount, values);
page.setTotalCount(count.intValue());
if(page.isEmpty())
return Collections.EMPTY_LIST;
return queryForList(select, values, page);
}

/**
* Prepared for sub-class for convenience. Query for list but do not return
* total results' number.
*
* @param select HQL for "select * from ..." and should return object list.
* @param values For prepared statements.
* @param page Page object for store page information.
*/
protected List queryForList(final String select, final Object[] values, final Page page) {
// select:
HibernateCallback selectCallback = new HibernateCallback() {
public Object doInHibernate(Session session) {
Query query = session.createQuery(select);
if(values!=null) {
for(int i=0; i<values.length; i++)
query.setParameter(i, values[i]);
}
return query.setFirstResult(page.getFirstResult())
.setMaxResults(page.getPageSize())
.list();
}
};
return (List) hibernateTemplate.executeFind(selectCallback);
}

/**
* Prepared for sub-class for convenience. Query for unique result.
*
* @param select HQL for "select * from ..." and should return unique object.
* @param values For prepared statements.
*/
protected Object queryForObject(final String select, final Object[] values) {
HibernateCallback selectCallback = new HibernateCallback() {
public Object doInHibernate(Session session) {
Query query = session.createQuery(select);
if(values!=null) {
for(int i=0; i<values.length; i++)
query.setParameter(i, values[i]);
}
return query.uniqueResult();
}
};
return hibernateTemplate.execute(selectCallback);
}

protected Object queryForObject(final DetachedCriteria dc) {
HibernateCallback callback = new HibernateCallback() {
public Object doInHibernate(Session session) {
return dc.getExecutableCriteria(session).uniqueResult();
}
};
return hibernateTemplate.execute(callback);
}



/**
* Prepared for sub-class for convenience.
*/
protected Object uniqueResult(final DetachedCriteria dc) {
HibernateCallback callback = new HibernateCallback() {
public Object doInHibernate(Session session) {
return dc.getExecutableCriteria(session).uniqueResult();
}
};
return hibernateTemplate.execute(callback);
}
protected List queryForLists(final String select, final Object[] values) {
// select:
HibernateCallback selectCallback = new HibernateCallback() {
public Object doInHibernate(Session session) {
Query query = session.createQuery(select);
if(values!=null) {
for(int i=0; i<values.length; i++)
query.setParameter(i, values[i]);
}
return query.list();
}
};
return (List) hibernateTemplate.executeFind(selectCallback);
}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值