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);
        }
    
    }
  • 相关阅读:
    Python基础之流程控制
    Python基础之深拷贝与浅拷贝
    常见开源告警系统对比分析(prometheus、open-falcon、zabbix)
    prometheus简介
    谈谈业务系统的监控报警
    UML类图与类的关系
    IntelliJ IDEA反向生成UML类图
    UML类图几种关系的总结
    UML类图详解和示例
    leetcode-----43. 字符串相乘
  • 原文地址:https://www.cnblogs.com/lm970585581/p/7346750.html
Copyright © 2011-2022 走看看