zoukankan      html  css  js  c++  java
  • 通过反射技术获取泛型真实实例

    使用这项技术可以对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);
        }
    
    }
  • 相关阅读:
    1062 Talent and Virtue (25 分)
    1083 List Grades (25 分)
    1149 Dangerous Goods Packaging (25 分)
    1121 Damn Single (25 分)
    1120 Friend Numbers (20 分)
    1084 Broken Keyboard (20 分)
    1092 To Buy or Not to Buy (20 分)
    数组与链表
    二叉树
    时间复杂度与空间复杂度
  • 原文地址:https://www.cnblogs.com/lm970585581/p/7346750.html
Copyright © 2011-2022 走看看