HibernateTemplate

使用HibernateTemplate可将Hibernate 的持久层访问模板化,使用HibernateTemplate 非常简单。创建Hi bernateTemplate 实例后,注入一个SessionFactory 的引用,就可执行持久化操作。SessionFactoyr 对象可通过构造参数传入,或通过设值方式传入。例如:
//获取Spring 上下文

ApplicationContext ctx = new FileSystemXmlApplicationContext("bean.xml");
//通过上下文获得SessionFactory
SessionFactory sessionFactory = (SessionFactory)ctx.getBean("sessionFactory") ;
HibernateTemplate 提供如下三个构造函数:
• HibernateTemplate() 。

第一个构造函数:构造一个默认的HibernateTemplate 实例,因此,使用HibernateTemplate实例之前,还必须使用方法setSessionFactory(SessionFactorysessionFactory)来为HibernateTemplate 传入SessionFactory 的引用。


• HibernateTemplate(org.hibernate.SessionFactory sessionFactory)

第二个构造函数:在构造时已经传入SessionFactory 引用。


• HibernateTemplate(org.hibernate.SessionFactory sessionFactory, booleanallowCreate) 

第三个构造函数:其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的实例。代码如下:

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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值