类名:public abstract class BaseDaoImpl<T> implements BaseDao<T>
1.由于hibernate sessionFactory的get(class,id)和load(class,id)方法的class无法用T直接表示,以致我们可以用获取泛型化超类的方法来代替T 方法如下:
定义一个泛型类:private Class<T>clazz;
定义抽象方法: public BaseDaoImpl(){
ParameterizedType type=(ParameterizedType) this.getClass().getGenericSuperclass(); //获取泛型化类如:BaseDaoImpl<User>
clazz=(Class<T>) type.getActualTypeArguments()[0];//获取该类的对象如:User,负值给clazz
}
2.下面我就可以来clazz用了,这样clazz就替代了原始的T
@Override
public T loadEntity(Integer id) {
return (T) sf.getCurrentSession().load(clazz, id);
}
@Override
public T getEntity(Integer id) {
return (T) sf.getCurrentSession().get(clazz, id);
}