在hibernate中实现泛型DAO时,最大的一个难点就是获得泛型类型的class对象。
public class GenericHibernateDao<T extends Serializable, PK extends Serializable> extends HibernateDaoSupport implements GenericDao<T,PK>{
private Class<T> entityClass;
// 构造方法,根据实例类自动获取实体类类型
public GenericHibernateDao() {
this.entityClass = null;
Class c = getClass();
Type t = c.getGenericSuperclass();
if (t instanceof ParameterizedType) {
Type[] p = ((ParameterizedType) t).getActualTypeArguments();
this.entityClass = (Class<T>) p[0];
}
}
}
这是泛型DAO的泛型实现类。我们的DAO类可以继承自这个类。例如class UserDao extends GenericHibernateDao<UserBean , int>。当我们去实例化UserDao的时候,就会去自动调用GenericHibernateDao中的构造方法(子类会首先调用父类的构造方法)。下面我们来分析父类的构造方法,看看他是怎么获得UserBean类型的。
Class c = getClass();这一句。表面上看是获得GenericHibernateDao类的实例,但是应该是子类的实例。
c也就代表了子类的class对象。
Type t = c.getGenericSuperclass()。得到父类的类型。
t instanceof ParameterizedType。检查父类是否是泛型(即参数化类)
Type[] p = ((ParameterizedType) t).getActualTypeArguments()。如果是泛型,那么得到所有的泛型参数。
this.entityClass = (Class<T>) p[0]。得到第一个参数类型。也就是UserBean了。
分享到:
相关推荐
基于hibernate5 泛型Dao实例,下载后改一下数据库 配置直接可以用
Struts2、Hibernate、Spring整合的泛型DAO (本人评价: 代码开发效率提高30% 代码出错率减少70%) 对于大多数开发人员,系统中的每个 DAO 编写几乎相同的代码到目前为止已经成为一种习惯。虽然所有人都将这种重复...
Hibernate泛型DAO及使用方法.
Hibernate泛型DAO及使用方法借鉴.pdf
泛型DAO 完善的dao代码及criteria查询底层代码
NULL 博文链接:https://zhaoshijie.iteye.com/blog/982232
NULL 博文链接:https://dr-yanglong.iteye.com/blog/2009075
就是这份文档: 描述了hibernateDAO如何使用,是hibernate访问数据库可以变的简单.
而泛型DAO是一个类型安全的,代码精简的设计模式(相对于传统DAO),尤其在DAO组件数量庞大的时候,代码量的减少更加明显。 泛型DAO的核心是定义一个GenericDao接口,声明基本的CRUD操作: 用hibernate作为持久化...
NULL 博文链接:https://simon-9527.iteye.com/blog/2307148
Struts2 Spring3 Hibernate 注解功能 DAO 泛型 通用分页
Struts2、Hibernate、Spring整合的泛型DAO (本人评价: 代码开发效率提高30% 代码出错率减少70%) 对于大多数开发人员,系统中的每个 DAO 编写几乎相同的代码到目前为止已经成为一种习惯。虽然所有人都将这种重复...
泛型dao 即:不写重复的dao 。这个技术 能让 dao层 和 service层 不写一行代码。外国都用这个泛型DAO了 中国还是一个类一个dao的写,我生气就写了这个文章了。 在本文中,我将为您展示如何避免再三地重复 DAO 代码
NULL 博文链接:https://287854442.iteye.com/blog/746718
NULL 博文链接:https://llying.iteye.com/blog/406058
DAo.hibernate3不是泛型的通用DAo我在网上找了好多都是泛型的,需要继承才能用,本人比较懒,找了好久才找到了这么个,不需要继承可以直接用的hibernate dao
减少重复代码的编写,增强DAO层代码的重用。
本程序整合了struts-2.2.3.1+spring-framework-3.1.0+hibernate-distribution-3.6.8+JSON+MySQL+Annotation,并且对Dao和Service进行了封装,内含.jar包,并且解决了一对多双向关联的could not initialize proxy - ...
利用ssh(Spring2.5+Struts2.1+Hibernate3.3)全注解整合这3个流行的框架,实现了增、删、改、查的功能,目前功能还比较简单,以后功能再慢慢增加。欢迎大家下载并交流。