基于泛型的通用Dao接口:(重要是在应用hibernate或JPA时运用)
package com.qiujy.dao;
import java.io.Serializable;
import java.util.List;
/**
* 基于泛型的通用Dao接口
*/
public interface GenericDao {
void create(T entity);
void delete(T entity);
void update(T entity);
T findById(Serializable id);
List findAll();
List findList(int pageNo, int pageSize);
int getCountOfAll();
}
hibernate对此泛型Dao接口的运用:
package com.qiujy.dao.hibernate;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.List;
import org.hibernate.criterion.Projections;
import com.qiujy.common.HibernateUtil;
import com.qiujy.dao.GenericDao;
/**
* Hibernate对泛型通用Dao接口的兑现
*/
public class GenericHibernateDaoImpl implements GenericDao {
private Class clazz;
@SuppressWarnings("unchecked")
public GenericHibernateDaoImpl() {
//透过反照获取T的部类信息范例
this.clazz = (Class)((ParameterizedType)this.getClass().getGenericSuperclass())
.getActualTypeArguments()[零];
}
public void create(T entity) {
HibernateUtil.getSession().save(entity);
}
public void delete(T entity) {
HibernateUtil.getSession().delete(entity);
}
@SuppressWarnings("unchecked")
public void update(T entity) {
//HibernateUtil.getSession().saveOrUpdate(entity);
entity = (T) HibernateUtil.getSession().merge(entity);
}
@SuppressWarnings("unchecked")
public List findAll() {
return HibernateUtil.getSession().createCriteria(clazz).list();
}
@SuppressWarnings("unchecked")
public List findList(int pageNo, int pageSize) {
return HibernateUtil.getSession().createCriteria(clazz)
.setFirstResult((pageNo - 一) * pageSize)
.setMaxResults(pageSize)
.list();
}
public int getCoun