通过反射技术获取泛型真实实例
使用这项技术可以对dao层进行简化处理:
把各个dao中相同的方法抽取出来形成一个公共dao:BaseDao
代码如下:
public class BaseDao<T> implements IBaseDao<T> { // 当前操作的实际的bean类型 private Class<T> clazz; // 获取类名称 private String className; // 反射泛型 public BaseDao(){ Type type = this.getClass().getGenericSuperclass(); // 转换为参数化类型 ParameterizedType pt = (ParameterizedType) type; // BaseDao<Employee> // 得到实际类型 Type types[] = pt.getActualTypeArguments(); // 获取实际类型 clazz = (Class<T>) types[0]; className = clazz.getSimpleName();//例如:Employee } // 容器注入 private SessionFactory sessionFactory; public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } public SessionFactory getSessionFactory() { return sessionFactory; } //下面的代码就是被抽取出的相同的代码,功能来自于接口的实现 @Override public void delete(int id) { sessionFactory .getCurrentSession() .createQuery("delete from " + className + " where id=?") .setParameter(0, id).executeUpdate(); } @SuppressWarnings("unchecked") @Override public T findById(int id) { return (T) sessionFactory.getCurrentSession().get(clazz, id); } @SuppressWarnings("unchecked") @Override public List<T> getAll() { return sessionFactory.getCurrentSession().createQuery("from " + className).list(); } @Override public void save(T t) { sessionFactory.getCurrentSession().save(t); } @Override public void update(T t) { sessionFactory.getCurrentSession().update(t); } }
微信搜索“HUC思梦”关注我吧,关注有惊喜,不定时有免费资源分享!