通过反射技术获取泛型真实实例
发布日期:2021-05-09 04:57:20 浏览次数:11 分类:博客文章

本文共 1625 字,大约阅读时间需要 5 分钟。

使用这项技术可以对dao层进行简化处理:

把各个dao中相同的方法抽取出来形成一个公共dao:BaseDao

代码如下:

public class BaseDao
implements 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); }}

 

上一篇:对于response.setContentType(MIME)的解释
下一篇:struts标签中的select

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月08日 16时28分46秒