论坛首页 入门技术论坛

在Hibernate中使用HibernateTemplate的三种方法

浏览 9754 次
该帖已经被评为新手帖
作者 正文
   发表时间:2010-04-18   最后修改:2010-04-19
在我们的项目中,经常要从HibernateDaoSupport继承然后使用他的HibernateTemplate给我们封装好的方法。

我们以用户模块的持久层UserDao这个类的addUser(User user)方法为例:

第一种方法:userDao extends HibernateDaoSupport:(不推荐使用)
我们知道继承这个类,必须给他注入一个HibernateTemplate的对象,或者是SessionFactory对象但是HibernateDaoSupport这个类的所有的方法都是final的,无法重写他的setSessionFactory(SessionFactory sessionFactory)方法来注入,只能使用xml的方式来生成userDao这个对象的时候,使用<property id ="xxx" ref="xxx">来注入这个对象,但是如果这样,如果我们的Dao层的类特别多,都需要在xml文件中进行配置我们的xml配置文件就会十分的庞大 臃肿

第二种方法:
public class BaseDao extends HibernateDaoSupport {
	
	@Resource(name="sessionFactory")
	public void setSF(SessionFactory sessionFactory) {
		super.setSessionFactory(sessionFactory);
	}
}

我们抽取出来一个Dao层的基类然后让这个类继承HibernateDaoSupport,然后我们自己随便写个方法参数是SessionFactory,然后再方法上面加入@Resource注解,把SessionFactory对象,注入到这个方法中来然后再这个方法中调用父类中也就是HibernateDaoSupport 中的setSessionFactory(SessionFactory sessionFactory)方法把sessionFactory给他注入进去。默认情况下@Resource注解是按照名称来注入的,但是这个时候我们自己写的这个方法无法与spring配置文件中的id名称匹配起来就会按照类型进行注入了。然后我们的UserDao类继承我们的BaseDao类就可以使用HibernateTemlate中的方法了。

第三种方法:
public class BaseDao {
    private HibernateTemplate hibernateTemplate;
    @Resource
    public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
         this.hibernateTemplate = hibernateTemplate;
}	
}


还是抽取出一个BaseDao的类,然后我不继承HibernateDaoSupport这个类了。我在这个类中,定义一个HibernateTemplate类型的属性,然后把这个类注入进来,UserDao等这些持久化类仍然是从这个类继承,就可以使用HibernateTemplate中的方法了。
   发表时间:2010-04-19   最后修改:2010-04-19
现在都流行用注解了

还是因为现在 网上的入门视频 讲注解的 为主流?

作为一个写了多年配置文件的程序员 我感觉压力很大
0 请登录后投票
   发表时间:2010-04-19  
不用那么大的压力呀,仁者见仁,智者见智用注解是因为他方便省去了些繁琐的xml文件的步骤,但是单从理解的角度来看的话,用xml文件更容易理解,这个在hibernate的注解和xml配置文件中就能看出来。但是如果你们项目组的其他人都用注解你用xml,那整合就比较难了,不支持一半是注解一半是xml配置文件的形式把 呵呵!
0 请登录后投票
   发表时间:2010-04-19  
lz有笔误,第三种方法不集成HibernateDaoSupport,但是代码却还是继承了。
0 请登录后投票
   发表时间:2010-04-19   最后修改:2010-04-19
呵呵 谢谢提醒,确实是这样的 整理的时候没有注意!
0 请登录后投票
   发表时间:2010-04-19  
这年头 还这么多人玩DAO啊~~!
0 请登录后投票
   发表时间:2010-04-19  
怎么这么多人喜欢用注解呢? 配置文件的作用是什么,就是为了可扩展性,注解写在类里,和直接用new的有什么区别?  你的DAO配置里就不能加个属性parent="BaseDao"吗?
0 请登录后投票
   发表时间:2010-04-19  
star022 写道
这年头 还这么多人玩DAO啊~~!

为什么不玩DAO了啊?
0 请登录后投票
   发表时间:2010-04-19  
whaosoft 写道
star022 写道
这年头 还这么多人玩DAO啊~~!

为什么不玩DAO了啊?

DAO没什么意义。
1.我只用hibernate。
2.我不换数据库。
3.sql和hql大部分写配置文件里面。
如此为什么不直接把session注入到service里面直接操作?
0 请登录后投票
   发表时间:2010-04-19  
其实用hibernate 还老老实实写dao的不多吧

多数人都是自己封装个baseDao 然后注入到service...
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics