通过反射技术获取泛型真实实例
作者:互联网
使用这项技术可以对dao层进行简化处理:
把各个dao中相同的方法抽取出来形成一个公共dao:BaseDao
代码如下:
public class BaseDaoimplements IBaseDao { // 当前操作的实际的bean类型 private Class clazz; // 获取类名称 private String className; // 反射泛型 public BaseDao(){ Type type = this.getClass().getGenericSuperclass(); // 转换为参数化类型 ParameterizedType pt = (ParameterizedType) type; // BaseDao// 得到实际类型 Type types[] = pt.getActualTypeArguments(); // 获取实际类型 clazz = (Class) 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 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); } }
标签:反射,getCurrentSession,void,id,sessionFactory,Override,实例,泛型,public 来源: https://blog.51cto.com/u_14612575/2740717