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);
        }
    
    }
  • 相关阅读:
    POJ 2636:Electrical Outlets
    POJ 2260:Error Correction
    POJ 2080:Calendar
    POJ 2017:Speed Limit
    POJ 1504:Adding Reversed Numbers
    POJ 1477:Box of Bricks
    POJ 1060:Modular multiplication of polynomials
    HDU 1379:DNA Sorting
    HDU 1009:FatMouse' Trade
    mysql修改初始密码
  • 原文地址:https://www.cnblogs.com/lm970585581/p/7346750.html
Copyright © 2011-2022 走看看