使用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.

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

<?xml version="1.0" encoding="gb2312"?> 
<!--Spring 配置文件的DTD 定义二〉 
<!DOCTYPE beans PUBLIC "-!!SPRING!!DTD BEAN!!EN"  ''http://www.springframework.org/dtd/spring-beans.dtd''> 
    <! -- Spring 配置文件的根元素是beans--> 
    <beans> 
        <!--定义数据源,该bean 的ID 为dataSource--> 
        <bean id=" dataSource" class=" org. springframework.jdbc. datasource. DriverManagerDataSource"> 
        <!-- 指定数据库驱动--> 
        <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property> 
        <!-- 指定连接数据库的URL--> 
        <property name="url"><value>jdbc:mysql://wonder:3306/j2ee</ value> 
        <!property> 
        <!-- root 为数据库的用户名--> 
        <property name="username"><value>root</value></property> 
        <!--pass 为数据库密码--> 
        <property name= "password" ><value>pass</value></property> 
    </bean> 
    <!--定义Hibernate 的SessionFactoy--> 
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 
        <!--依赖注入数据源,注入正是上文定义的dataSource--> 
        <property name="dataSource"><ref local="dataSource"/></property> 
        <!--mappingResouces属性用来列出全部映射文件〉 
        <property name="mappingResources"> 
            <list> 
                <!--以下用来列出所有的PO 映射文件--> 
                <value>lee/Person.hbm.xml</value> 
            </list> 
        </property> 
        <!--定义Hibernate 的SessionFactory的属性--> 
        <property name="hibernateProperties"> 
            <props> 
                <!-- 指定Hibernate 的连接方言--> 
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> 
                <!--不同数据库连接,启动时选择create , update , create-drop--> 
                <prop key="hibernate.hbm2ddl.auto">update</prop> 
            </props> 
    </property> 
    </bean> 
    <!--配置Person 持久化类的DAO bean--> 
    <bean id="personDao" class="lee.PersonDaoImpl"> 
        <!--采用依赖注入来传入SessionFactory的引用〉 
        <property name="sessionFactory"><ref local="sessionFactory"/></property> 
    </bean> 
</beans> 
在DAO 实现类中,可采用更简单的方式来取得HibemateTemplate的实例。代码如下: 
 
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 "); 
    } 
}

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/13814.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论