相信HibernateDaoSupport这一个类在Hibernate里面常见了,但是它是抽象类,怎么就可以灵活、方便直接的取出相关的有用实例?

1)、此为一xxDaoImpl类:

public class EmailDaoImpl extends HibernateDaoSupport implements EmailDao {

......

}

2)、你是否觉得以下查询有点奇怪,Session怎么可以直接就取得?以下然我为你解析下其原理吧!

query=getSession().createQuery("select count(*) from Email as model where model." + propertyName + "= :propertyName");

3)、Spring容器的bean截取:

1 <bean id="emailDao" class="com.gdpu.project.dao.impl.EmailDaoImpl">
2    <property name="sessionFactory"> 
 3    <ref bean="sessionFactory" />  
 4  </property>  
5 </bean>
4)、从HibernateDaoSupport的取Session、SessionFactory、HibernateTemplate实例的透析:

请看HibernateDaoSupport 的定义,从以下代码得出以下:

1、只要向EmailDaoImpl注入了sessionFactory,EmailDaoImpl而又继承了HibernateDaoSupport 这个抽象类,

2、也就是说EmailDaoImpl已经具有了HibernateDaoSupport(其方法和属性是final,不可重写) 里面的所有功能和属性,

3、sessionFactory的注入调用了其setter方法,进而调用了createHibernateTemplate(sessionFactory),实例化了一个HibernateTemplate对象(委派了 HibernateTemplate构造)。

4、现在有个HibernateTemplate和SessionFactory实例了,显然,此时可以通过相关方法得到Session、SessionFactory、HibernateTemplate等这些实例了。

 14 public abstract class HibernateDaoSupport extends DaoSupport {
15
16 privateHibernateTemplate hibernateTemplate;
18
19 public final void setSessionFactory(SessionFactory sessionFactory) {
20   if (this.hibernateTemplate == null || sessionFactory != this.hibernateTemplate.getSessionFactory()) {
21     this.hibernateTemplate = createHibernateTemplate(sessionFactory);
22   }
23 }
24
25 public final SessionFactory getSessionFactory() {
32   return (this.hibernateTemplate != null ? this.hibernateTemplate.getSessionFactory() : null);
33 }
36 public final void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
37   this.hibernateTemplate = hibernateTemplate;
38 }
39
41 public final HibernateTemplate getHibernateTemplate() {
42   return this.hibernateTemplate;
43 }
45
53 protected final Session getSession()
54 throwsDataAccessResourceFailureException, IllegalStateException {55
56   return getSession(this.hibernateTemplate.isAllowCreate());
57 }
58//部分代码以略掉
58        ......
59}

作者: 曹瞒 发表于 2011-05-17 13:42 原文链接

推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架
新浪微博粉丝精灵,刷粉丝、刷评论、刷转发、企业商家微博营销必备工具"