JavaEE | 通用Dao的抽取

Posted 闲人索事

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaEE | 通用Dao的抽取相关的知识,希望对你有一定的参考价值。

点击蓝色字关注我们!

长的好看的人都关注了

SSH整合里通用Dao层的抽取


前阵子在做SSH框架整合的时候,重新练习了一下。做到后期的时候感觉Dao层的大部分代码都是重复的,除了部分模块里比较特别的方法之外,将普通的增删改和查询分为两部分进行了重构。


增删改的抽取

JavaEE | 通用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的抽取的主要内容,如果未能解决你的问题,请参考以下文章

Dao操作的抽取,BaseDao

JavaEE笔记——BaseDao的使用

Spring Transactions 和通用 DAO 和服务的最佳实践

javaEE SSH框架 BaseAction的抽取以及其他方面代码优化

006 代码抽取 - bos

系统管理模块_部门管理_改进_抽取添加与修改JSP页面中的公共代码_在显示层抽取BaseAction_合并Service层与Dao层