使用HibernateTemplate

系统 1590 0

使用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  " );
    }

}

使用HibernateTemplate


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论