GenericDao
import org.hibernate.Query;
public interface GenericDao<T> {
public T findById(int id);
public Query createQuery(String hql,Object... params);
public Query createPageQuery(String hql,int offset,int pagesize,Object... params);
public T saveOrUpdate(T entity);
public void delete(int id);
}
GenericDaoImpl
import java.lang.reflect.ParameterizedType;
import javax.annotation.Resource;
import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.genrong.exam.manager.GenericDao;
public class GenericDaoImpl<T> extends
HibernateDaoSupport implements GenericDao<T> {
private Class<?> type;
public GenericDaoImpl() {
this.type = (Class<?>) ((ParameterizedType) getClass()
.getGenericSuperclass()).getActualTypeArguments()[0];
}
@Resource(name = "sessionFactory")
public void setSuperHibernateTemplate(SessionFactory sessionFactory) {
super.setSessionFactory(sessionFactory);
}
public Class<?> getType() {
return type;
}
public void delete(int id) {
getHibernateTemplate().delete(findById(id));
}
public Query createQuery(String hql, Object... params) {
Query query = getSession().createQuery(hql);
for (int i = 0; i < params.length; i++) {
query.setParameter(i, params[i]);
}
return query;
}
public Query createPageQuery(String hql,int offset,int pagesize, Object... params) {
Query query = getSession().createQuery(hql);
for (int i = 0; i < params.length; i++) {
query.setParameter(i, params[i]);
}
query.setFirstResult(offset).setMaxResults(pagesize);
return query;
}
@SuppressWarnings("unchecked")
public T findById(int id) {
return (T) getHibernateTemplate().get(getType(), id);
}
public T saveOrUpdate(T entity) {
getHibernateTemplate().saveOrUpdate(entity);
return entity;
}
}