读书人

施用HibernateTemplate

发布时间: 2012-08-13 13:21:53 作者: rapoo

使用HibernateTemplate

使用HibernateTemplate
HibernateTemplate 可将Hibernate 的持久层访问模板化,使用HibernateTemplate 非常简单。创建Hi bernateTemplate 实例后,注入一个SessionFactory 的引用,就可执行持久化操作。SessionFactoyr 对象可通过构造参数传入,或通过设值方式传入。例如:
//获取Spring 上下文
ApplicationContext ctx = new FileSystemXmlApplicationContext("bean.xml");
//通过上下文获得SessionFactory
SessionFactory sessionFactory = (SessionFactory) ctx.getBean("sessionFactory") ,
HibernateTemplate 提供如下三个构造函数:
? HibernateTemplateO 。
? HibernateTemplate(org.hibernate.SessionFactory sessionFactory)。
? HibernateTemplate(org.hibernate.SessionFactory sessionFactory, boolean allowCreate) 。

第一个构造函数:构造一个默认的HibernateTemplate 实例,因此,使用HibernateTemplate实例之前,还必须使用方法setSessionFactory(SessionFactory sessionFactory)来为HibernateTemplate 传入SessionFactory 的引用。
第二个构造函数:在构造时已经传入SessionFactory 引用。
第三个构造函数:其boolean 型参数表明,如果当前线程己经存在一个非事务性的Session ,是否直接返回此非事务性的Session 。
对于在Web 应用中,通常启动时自动加载ApplicationContext , SessionFactory 和DAD对象都处在Spring 上下文管理下。因此无须在代码中显式设置,可采用依赖注入解耦SessionFactory 和DAO.

其依赖关系可通过配置文件来设置

public class PersonDaoImpl implements PersonDao{    // 执行持久化操作的HibernateTemplate    HibernateTemplate ht;    private SessionFactory sessionFactory;    //依赖注入Sess工onFactory 的必需的setter 方法    public void setSessionFactory(SessionFactory sessionFactory)    {        this.sessionFactory = sessionFactory;    }    //该方法用于完成HibernateTemplate的初始化    private void setHibernateTemplate()        {        if (ht ==null){            ht = new HibernateTemplate(sessionFactory);        }    }    /**    *加载Person 实例    * @param id 需要加载Person 实例的主键值    * @return 返回加载的Person 实例    */    public Person get(int id){        setHibernateTemplate();        return (Person)ht.get(Person.class , new Integer(id));    }    /**    *保存Person 实例    * @param person 需要保存的Person 实例    */    public void save(Person person){        setHibernateTemplate() ;        ht.save(person) ;    }    /**    *修改Person 实例    * @param person 需要修改的Person 实例    */    public void update(Person person){        setHibernateTemplate();        ht.update(person);    }    /**    *删除Person 实例    * @param id 需要删除的Person id    */    public void delete(int id){        setHibernateTemplate();        ht.delete(ht.get(Person.class , new Integer(id)));    }    /**    *删除Person 实例    * @param perso口需要删除的Person 实例    */    public void delete(Person person){        setHibernateTemplate();        ht.delete(person) ;    }    /**    *根据用户名查找Person    * @param name 用户名    * @return 用户名对应的全部用户    */    public List findByPerson(String name){        setHibernateTemplate();        return h t. find("from Person p where p.name like ?" , name);    }    /**    *返回全部的Person 实例    * @return 全部的Person 实例    */    public List findAllPerson(){        setHibernateTemplate();        return ht.find("from Person ");    }}




读书人网 >软件架构设计

热点推荐