原因:底层在使用hibernateTemplate进行查询操作的时候,需要Class。但是这里使用了泛型是不确定的,
可以使用这种方式动态的获取Class。
父类的声明
public class BaseDaoImpl<T> extends HibernateDaoSupport implements IBaseDao<T> {
父类的成员变量
private Class<T> entityClass;
父类的构造方法,动态获取T的类型
*比如get方法使用的时候需要指定具体的Class,才可以使用。可以通过这样的操作。
public BaseDaoImpl() {
ParameterizedType superclass = (ParameterizedType) this.getClass().getGenericSuperclass();
//获得父类上声明的泛型数组
Type[] actualTypeArguments = superclass.getActualTypeArguments();
entityClass = (Class<T>) actualTypeArguments[0];
}
@Override
public List<T> findAll() {
String hql="FROM "+entityClass.getSimpleName();
return (List<T>) this.getHibernateTemplate().find(hql);
}
@Override
public T findById(Serializable id) {
return this.getHibernateTemplate().get(entityClass, id);
}
web层有需求需要抽取出一个BaseAction→ActionSupport→ModelDriven。需要比上边多一步,实例化model.
model=entityClass.newInstance();