博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于HibernateGenericDAO 的一点补充
阅读量:5843 次
发布时间:2019-06-18

本文共 1568 字,大约阅读时间需要 5 分钟。

HibernateGenericDAO 

dao的实现用继承:

com.googlecode.genericdao.dao.hibernate.GenericDAOImpl<Book, String>

 

注意几点:

1.继承时必须声明泛型的具体类.如上的 <Book, String>.HibernateGenericDAO 会调用com.googlecode.genericdao.dao.DAOUtil的

getTypeArguments 方法对泛型进行初始化.

2.书写setSessionFactory()方法调用父类的setSessionFactory()来初始化sessionFactory.

 

如果想自己再写一个BaseDao继承GenericDAOImpl,并初始化sessionFactory,是做不到的.因为DAOUtil中的getTypeArguments()方法会获取不到泛型.

故而,我用了一个折中的方法.稍微改变了以下DAOUtil中的getTypeArguments()方法.

其中的关键处在于

while (resolvedTypes.containsKey(baseType)) {                baseType = resolvedTypes.get(baseType);            }

baseType是一个type类型的.在该源码中使用的是java.lang.reflect.TypeVariable的实现sun.reflect.generics.reflectiveObjects.TypeVariableImpl.

其中的比较部分会先用GenericDeclaration进行比较.故而不是在GenericDAOImpl声明的泛型是无法初始化GenericDAOImpl上的泛型的.

如:

public class BaseDaoImpl
extends GenericDAOImpl implements BaseDao
public class PersonDaoImpl extends BaseDaoImpl

这样的使用方式在

resolvedTypes.containsKey(baseType) 判断时,始终为false. 我的做法是只比较name的值.
for (Type type3 : resolvedTypes.keySet()) {            if (((TypeVariable) type3).getName()                     .equals(((TypeVariable) baseType).getName())) {                typeArgumentsAsClasses.add(getClass(resolvedTypes.get(type3)));            }        }        while (resolvedTypes.containsKey(baseType)) {            baseType = resolvedTypes.get(baseType);        }        if (getClass(baseType) != null) {            typeArgumentsAsClasses.add(getClass(baseType));        }

这样做的好处是支持多重继承,任然可以初始化泛型.坏处是泛型的命名一定要与基类相同.

 

 

转载于:https://www.cnblogs.com/fengyexjtu/p/5140939.html

你可能感兴趣的文章
分布式光伏发电建设中的逆变器及其选型
查看>>
UML中关联,组合与聚合等关系的辨析
查看>>
《大数据管理概论》一3.2 大数据存储与管理方法
查看>>
ios的google解析XML框架GDataXML的配置及使用
查看>>
netty-当一个客户端连接到来的时候发生了什么
查看>>
PHP_5.3.20 源码编译安装PHP-FPM
查看>>
在51CTO三年年+了,你也来晒晒
查看>>
js控制图片等比例缩放
查看>>
Java高级开发工程师面试考纲
查看>>
FreeMarker表达式
查看>>
Debian9.2 下使用vnstat查看服务器带宽流量统计
查看>>
NGINX + PHP-FPM 502
查看>>
Openstack API常用命令
查看>>
OpenSSL漏洞凶猛来袭 慧眼恶意代码监测应对有方
查看>>
C语言 喝汽水问题
查看>>
ubuntu 下安装 mysql
查看>>
关于k-means聚类算法的matlab实现
查看>>
一键安装Gitlab后的备份、迁移与恢复
查看>>
因为本人工作繁忙,精力有限,本博客停止更新。有兴趣的博友可以关注我在CSDN上的主博客...
查看>>
SQL server查看触发器是否被禁用
查看>>