HibernateDaoSupport

 Spring为Hibernate的DAO提供工具类:HibernateDaoSupport。该类主要提供了两个方法:

  • public final HibernateTemplate getHibernateTemplate()
  • public final void setSessionFactory(SessionFactory sessionFactory)
  • public final SessionFactory getSessionFactory()
  • protected final Session getSession()

其中,setSessionFactory方法接收来自Spring的applicationContext的依赖注入,接收了配置在Spring 中的SessionFactory实例,getHibernateTemplate方法用来利用刚才的SessionFactory生成Session, 再生成HibernateTemplate来完成数据库的访问。

典型的继承HibernateDaoSupport的DAO代码如下:

public class UserDAOImpl extends HibernateDaoSupport implements UserDAO{
public void save(Users transientInstance) {
log.debug("saving Users instance");
try {
getHibernateTemplate().save(transientInstance);
log.debug("save successful");
} catch (RuntimeException re) {
log.error("save failed", re);
throw re;
}
}
………………
}

也可以通过

public void register(User user) throws Exception {
        super.getSession().save(user);
       
    }

    public boolean login(User user) throws Exception {
        boolean flag=false;
        String hql = "FROM User AS u WHERE u.userid=? AND u.userpwd=?";
        Query q= super.getSession().createQuery(hql);
        q.setString(0, user.getUserid());
        q.setString(1, user.getUserpwd());
        List all = q.list();
        if(all.size()>0){
            flag = true;
            User t = (User)all.get(0);
            user.setGrade(t.getGrade());
        }
        return flag;
    }

 

super.getSession() 获取session

 

实 际上,DAO的实现依然借助了HibernateTemplate的模板访问方式,只是,HibernateDaoSupport将依赖注入 SessionFactory的工作已经完成,获取HibernateTemplate的工作也已经完成。注意,这种方法须在Spring的配置文件中配 置SessionFactory。

在继承HibrnateDaoSupport的DAO实现里,Hibernate Session的管理完全不需要Hibernate代码打开,而由Spring来管理。Spring会根据实际的操作,采用“每次事务打开一次 session”的策略,自动提高数据库访问的性能。 hibernateDaoSupport 默认是可以不用管理事务和关闭session的. 它可以自动处理. 如果对数据库的操作失败也会回滚到原来的状态. 但我们也可以手动出来事务..  但session还是不需要我们去关闭的.  如果关闭的session的话会抛session  is closed异常.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值