JavaEE | 通用Dao的抽取
Posted 闲人索事
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaEE | 通用Dao的抽取相关的知识,希望对你有一定的参考价值。
长的好看的人都关注了
前阵子在做SSH框架整合的时候,重新练习了一下。做到后期的时候感觉Dao层的大部分代码都是重复的,除了部分模块里比较特别的方法之外,将普通的增删改和查询分为两部分进行了重构。
增删改的抽取
查询方法的抽取
抽取查询方法的时候会稍微麻烦一些,主要是要获取泛型的具体类类型,并不能用 T.class 的方式获取。
解决办法:
public class BaseDaoImpl<T> extends HibernateDaoSupport implements BaseDao<T> {
private Class clazz;
public BaseDaoImpl() {
//获取当前调用的类实例
Class clazz = this.getClass();
//获取type
Type type = clazz.getGenericSuperclass();
//强转为参数化类型
ParameterizedType pType = (ParameterizedType) type;
//获取实际类型参数
Type[] types = pType.getActualTypeArguments();
this.clazz = (Class) types[0];
}
@Override
public T findById(Long id) {
return (T) this.getHibernateTemplate().get(clazz, id);
}
}
其中的this代表的是调用BaseDaoImpl类的子类实例,通过this获取到具体的类实例,进而获取到继承的父类里面的实际类型参数。
最后附上一张在隔壁COCOPart拍的几部车
点击下方“阅读原文”
以上是关于JavaEE | 通用Dao的抽取的主要内容,如果未能解决你的问题,请参考以下文章
Spring Transactions 和通用 DAO 和服务的最佳实践
javaEE SSH框架 BaseAction的抽取以及其他方面代码优化
系统管理模块_部门管理_改进_抽取添加与修改JSP页面中的公共代码_在显示层抽取BaseAction_合并Service层与Dao层