HibernateDaoSupport

来源:互联网 发布:网络反侦查 编辑:程序博客网 时间:2024/06/04 23:20
Spring的Hibernate ORM 框架带来了方便的HibernateDaoSupport类,你的DAO类可以继承它:
public class StudentDaoHibernate extends HibernateDaoSupport implements StudentDao{
.................
}
如果你选择这种设计,就需要动态注入SessionFactory而HibernateDaoSupport包含这个属性.这个类提供了一个方便的方法getHibernateTemplate(); 就能得到HibernateTemplate的一个实例.它也有getSession()和releaseSession,以便于你应为某些原因而不使用HibernateTempate的情况下执行Hibernate操作。
HibernateDaoSupport提供了基于AOP事务的自动处理,程序员完全可以不用理会事务的开始与提交。在JDBC中一个Connection对象使用一个事务,那么在Hibernate中一个事务肯定要关联一个SessionFactory了,然而这个SessionFactory却没有在DAO中体现。其实主要的原因是HibernateDaoSupport类已经默默地做了封装的工作,它用一个setSessionFactory方法将SessionFactory进行注入,所以继承自HibernateDaoSupport类的DAO都会具有SessionFactory的属性,从而可以通过SessionFactory创建Session实例操作数据库。
在继承HibrnateDaoSupport的DAO实现里,Hibernate Session的管理完全不需要Hibernate代码打开,而由Spring来管理。Spring会根据实际的操作,采用“每次事务打开一次session”的策略,自动提高数据库访问的性能。


 由于Hibernate集成了JDBC,所以在访问数据库时,与直接使用JDBC访问数据库相比,Hibernate在连接、访问数据库时的代码减少了很大一大半。但由此而来也相应必须增加访问Hibernate配置文件和SessionFactory、Session的打开、关闭的代码。为了解决以上相同代码出现的复用问题,Hibernate对此又进行了再一次封装,于是,幸运地出现了HibernateDaoSupport。因此,在使用HibernateDaoSupport模板对数据库访问时,更加方便、简单,特别是进行简单的增删改查。

    下面是我自己写的一点代码参考:
/**  
 * @author wifygoo  
 * 对企业信息的简单增删改查。  
 */ 
public class EnterpriseDaoImpl extends HibernateDaoSupport implements 
        EnterpriseDao {  
    /**  
     * @param Enterprise  
     * 删除某条企业信息。  
     */ 
    public void del(Enterprise enterprise) {  
        this.getHibernateTemplate().delete(enterprise);  
    }  
    /**  
     * @return 所有的企业信息。  
     * 查询所有的企业信息。  
     */ 
    @SuppressWarnings("unchecked")  
    public List<Enterprise> findAllEnterprises() {  
        String hql = "from Enterprise enterprise";  
        return this.getHibernateTemplate().find(hql);  
    }  
    /**  
     * @param Integer,企业编号。  
     * @return 某个企业信息。  
     * 通过企业编号查询企业信息。  
     */ 
    public Enterprise findEnterpriseById(Integer id) {  
        return (Enterprise) this.getHibernateTemplate().load(Enterprise.class, id);  
    }  
    /**  
     * @param Enterprise  
     * 添加企业信息。  
     */ 
    public void save(Enterprise enterprise) {  
        this.getHibernateTemplate().save(enterprise);  
    }  
    /**  
     * @param Enterprise  
     * 修改企业信息。  
     */ 
    public void update(Enterprise enterprise) {  
        this.getHibernateTemplate().update(enterprise);  
    }  
}

0 0
原创粉丝点击