Session、SessionFactory、HibernateTemplate实例是如何从HibernateDaoSupport抽象类实例取出
2011-05-17 13:42
459 查看
相信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截取:
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等这些实例了。
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截取:
<bean id="emailDao" class="com.gdpu.project.dao.impl.EmailDaoImpl"> <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等这些实例了。
public abstract class HibernateDaoSupport extends DaoSupport { privateHibernateTemplate hibernateTemplate; public final void setSessionFactory(SessionFactory sessionFactory) { if (this.hibernateTemplate == null || sessionFactory != this.hibernateTemplate.getSessionFactory()) { this.hibernateTemplate = createHibernateTemplate(sessionFactory); }
23 } public final SessionFactory getSessionFactory() { return (this.hibernateTemplate != null ? this.hibernateTemplate.getSessionFactory() : null); }
public final void setHibernateTemplate(HibernateTemplate hibernateTemplate) { this.hibernateTemplate = hibernateTemplate; } public final HibernateTemplate getHibernateTemplate() { return this.hibernateTemplate; } protected final Session getSession() throwsDataAccessResourceFailureException, IllegalStateException { return getSession(this.hibernateTemplate.isAllowCreate()); }
58//部分代码以略掉
58 ......
59}
相关文章推荐
- 继承HibernateDaoSupport后怎样获取session&&注入sessionFactory
- 子类继承HibernateDaoSupport后如何注入SessionFactory
- spring中的HibernateDaoSupport的用法(Session是如何获取的)
- SessionFactory、HibernateTemplate、HibernateDaoSupport之间的关系说明
- hibernatesupportDao 注入 sessionfactory hibernateTemplate
- 使用注解为HibernateDaoSupport注入sessionFactory
- HibernateDaoSupport 类session未关闭导致的连接泄露问题
- 关于DAO层的sessionFactory注入和是否继承HibernateDAOSupport
- HibernateTemplate 和HibernateDaoSupport的session
- 继承HibernateDaoSupport后,获得session 并使用session操作sql的方法
- MyBatis中如何通过继承SqlSessionDaoSupport来编写DAO
- LocalSessionFactoryBean为什么能注入到HibernateDaoSupport
- 由openSession、getCurrentSession和HibernateDaoSupport浅谈Spring对事物的支持
- hibernate中的SessionFactory,Session分别表示什么啊?如何理解?
- Spring 与 Hibernate 的整合DaoImpl中Session如何获取
- 使用注解为HibernateDaoSupport注入sessionFactory
- 继承hibernateDaoSupport之后通过注解方式注入SessionFactory
- SessionFactory、HibernateTemplate、HibernateDaoSupport之间的关系说明
- SSH实例:基于HibernateDaoSupport的泛型Dao
- spring : HibernateDaoSupport,其中的sessionFactory并不能自动注入,只能手动