Spring HibernateTemplate的使用

1.在web.xml中添加监听器解析applicationContext.xml文件获取Spring应用程序上下文
 <listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>
2.在applicationContext.xml文件中创建数据源和SessionFactory(已使用ThreadLocal类,一个线程一个Session)
 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
  <property name="driverClassName">
   <value>oracle.jdbc.driver.OracleDriver</value>
  </property>
  <property name="url">
   <value>jdbc:oracle:thin:@127.0.0.1:1521:mumu</value>
  </property>  
  <property name="username">
   <value>liulibo</value>
  </property>
  <property name="password">
   <value>liulibo</value>
  </property> 
 </bean>
 
 <bean id="PropertiesFactoryBean" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
  <property name="properties">
   <props>
    <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
    <prop key="hibernate.show_sql">true</prop>
   </props>
  </property>
 </bean>
  
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="dataSource">
     <ref bean="dataSource"/>
  </property>
  <property name="hibernateProperties">
   <ref bean="PropertiesFactoryBean" />
  </property>
  <property name="mappingResources">
   <list>
          <value>xml/person.hbm.xml</value>
      </list>
  </property>
 </bean>
3.使用HibernateTemplate对象查询数据库(LocalSessionFactoryBean已使用ThreadLocal类,即一个线程一个Session)
 注:HibernateTemplate会自动关闭Session,hibernate中用HQL语句占位符用的是:XX,而在HibernateTemplate中find用的是?
 3.1.在spring-servlet.xml文件中将sessionFactory注入Dao实现类中
   在Dao实现类通过sessionFactory创建HibernateTemplate对象查询
 3.2继承HibernateDaoSupport类(建议)
   HibernateDaoSupport属性:sessionFactory(必须的)
    在spring-servlet.xml文件中将sessionFactory注入HibernateDaoSupport继承Dao实现类中
   使用getHibernateTemplate()获取HibernateTemplate对象查询
 3.3在spring-servlet.xml文件中将sessionFactory注入org.springframework.orm.hibernate3.HibernateTemplate类中创建HibernateTemplate对象中
   HibernateTemplate属性:sessionFactory(必须的)(建议)
   在Dao实现类中注入HibernateTemplate对象
 可用HibernateTemplate对象自定义查询execute(HibernateCallback实现类通过doInHibernate方法使用org.hibernate.Session查询)
4.过滤器.在web.xml中通过过滤器解决Hibernate延迟加载问题(实质:在调用HibernateTemplate方法查询数据库之前和之后获取.关闭Session. )
 注:不能自己关闭session,LocalSessionFactoryBean对象名必须为sessionFactory
 <filter>  
  <filter-name>OpenSessionInViewFilter</filter-name>
   <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
  </filter>
  <filter-mapping>     
   <filter-name>OpenSessionInViewFilter</filter-name>
  <url-pattern>*.do</url-pattern>
 </filter-mapping> 
5.事务(实质:在Hibernate中一个Session只能有一个Ttransaction的commit()有效,故在调用业务方法前后添加事务的开启和关闭)
 注:自己的commit()都是无效的提交
 在applictionContext.xml中创建事务管理器
  <bean id="HibernateTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
   <property name="sessionFactory">
    <ref bean="sessionFactory"/>
   </property>
      </bean>
  在spring-servlet.xml中通过事务管理器创建代理类
   <bean id="proxyPersonBiz" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
   <property name="transactionManager">
    <ref bean="HibernateTransactionManager"/>
   </property>
   <property name="target"><ref bean="PersonBiz"/>
   </property>
   <property name="transactionAttributes">
    <props>  
     <prop key="add*">PROPAGATION_REQUIRED,-exception.AddException</prop>
     <prop key="update">PROPAGATION_REQUIRED</prop>
    </props>
   </property>
     </bean>
 将代理类注入控制器子类中.使用代理Biz
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值