专栏首页HUC思梦的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);
    }

}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Maven私服搭建

    为什么要搭建nexus私服,原因很简单,有些公司都不提供外网给项目组人员,因此就不能使用maven访问远程的仓库地址,所以很有必要在局域网里找一台有外网权限的机...

    HUC思梦
  • spring笔记(二)

    (web.xml / struts.xml /bean.xml /hibernate.xml / *.hbm.xml)

    HUC思梦
  • SpingCloud之feign框架调用

    总结起来,feign框架可以理解成路由,对url进行再次包装后供给客户端调用,可以在这个路由上进行一系列限制操作,增强安全性。

    HUC思梦
  • Hystrix讲解与应用

    复杂分布式系统结构中的应用程序有数十个依赖关系, 每个依赖关系在某些时候将不可避免的失败

    全栈自学社区
  • 【深度学习】21个深度学习调参技巧,一定要看到最后一个

    训练深度神经网络是困难的。它需要知识和经验,以适当的训练和获得一个最优模型。在这篇文章中,我想分享我在训练深度神经网络时学到的东西。以下提示和技巧可能对你的研究...

    黄博的机器学习圈子
  • 手机开发者年入153万,机器学习并非最高:IEEE最新薪资报告

    有趣的是,在这份调查了 8800 余人的报告中,我们得到了一些出人预料的结论:在北美工程师的行列中,收入最高的是开发智能手机和手表相关产品的那些人——他们的年收...

    CDA数据分析师
  • ES6 系列之模板字符串

    模板字符串支持嵌入变量,只需要将变量名写在 ${} 之中,其实不止变量,任意的 JavaScript 表达式都是可以的:

    夜尽天明
  • Unity3D网络通讯(四)--Socket通讯之Tcp通讯

    UnityWebRequest通过Restful的通讯我们已经实现了,《笔记|Unity异步处理与UI Text显示的问题》章中在做Tcp通讯时因为用到了异步处...

    Vaccae
  • 挖掘dwr

    精巧的设计使DWR很容易被java开发人员接受;对传统web程序的无侵害性让它被引入更多的项目。与服务器端通信,DWR很有代表性,并很好的隐藏的xm...

    源哥
  • 对浮点数的一些理解

    相比int等整型,float等浮点类型的表示和存储较为复杂,但它又是一个无法回避的话题,那么就有必要对浮点一探究竟了。在计算机中,一般用IEEE浮点近似表示任意...

    编程珠玑

扫码关注云+社区

领取腾讯云代金券