Spring HibernateTemplate的使用

2008-03-25 11:38 2020人阅读 评论(0) 收藏 举报
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

Spring HibernateTemplate的使用的更多相关文章

  1. 从Spring HibernateTemplate模板方法设计模式的实现谈起

    概述 模板方法模式是GOF设计模式中很典型的设计模式,其意图是由抽象父类控制顶级逻辑,并把基本操作的实现推迟到子类去实现,这是通过继承的手段来达到对象的复用.Spring模板方法模式实际是模板方法模式 ...

  2. Spring HibernateTemplate与HibernateDaoSupport对比

    HibernateTemplate与HibernateDaoSupport两者都是spring整合hibernate提供的模板技术. 对于保存一个对象,HibernateTemplate需要先配置 配 ...

  3. Spring HibernateTemplate

    HibernateTemplate利用模板设计模式,可将重复的opensession getcurrentsession工作省去,只将必要操作执行即可,其它的由spring来帮我们处理.   < ...

  4. spring HibernateTemplate.save() 方法的自动提交问题

    如题: service1: dao1.save(obj);   //失败,应该给spring捕获,但没有,程序继续执行下去了. redisService.fun1();  //被执行 service2 ...

  5. Hibernate整合Spring异常'sessionFactory' or 'hibernateTemplate' is required

    今日在写GenericDao时,发现了一个异常,内容如下: org.springframework.beans.factory.BeanCreationException: Error creatin ...

  6. HibernateTemplate和HibernateDaoSupport(spring注入问题)

    HibernateTemplate HibernateTemplate是spring提供的一个就hibernate访问持久层技术而言.支持Dao组件的一个工具.HibernateTemplate提供持 ...

  7. 集成Spring后HibernateTemplate实现分页

    spring 整合 hibernate 时候用的 HibernateTemplate 不支持分页,因此需要自己包装一个类进行分页,具体实现如下...使用spring的hibernateTemplate ...

  8. hibernateTemplate HibernateDaoSupport不建议在Spring与Hibernate整合中使用

    HibernateTemplate类属于spring框架中的类 :org.springframework.orm.hibernate3.HibernateTemplate HibernateTempl ...

  9. Spring aop与HibernateTemplate——session管理(每事务一次 Session)

    一.HibernateTemplate与Spring aop简介 参见http://bbs.csdn.net/topics/340207475中网友blueram的发言.(感谢blueram) 二.在 ...

随机推荐

  1. 一篇详细的 Mysql Explain 详解

    一.语法 explain < table_name > 例如: explain select * from t3 where id=3952602; 二.explain输出解释 +—-+— ...

  2. BZOJ 1977 次小生成树(最近公共祖先)

    题意:求一棵树的严格次小生成树,即权值严格大于最小生成树且权值最小的生成树. 先求最小生成树,对于每个不在树中的边,取两点间路径的信息,如果这条边的权值等于路径中的权值最大值,那就删掉路径中的次大值, ...

  3. 利用智能手机(Android)追踪一块磁铁(二)

    在上一篇博客中提到了利用磁场强度推算传感器位置坐标的公式,下面就介绍怎么利用智能手机完成磁铁的追踪(任何具有磁感应器的装置均可以),这里主要是利用Android手机. 1:程序步骤: 首先将磁铁放置在 ...

  4. HDOJ-1013 Digital Roots

    http://acm.hdu.edu.cn/showproblem.php?pid=1013 1.给出一个整数,求每一位上的数字之和 2.若求出的和大于1位,则对该和继续执行第1步,直至和的位数为1 ...

  5. vi常用命令集锦

    转载,原文地址:http://blog.csdn.net/hackbuteer1/article/details/6575232 vi编辑器有3种模式:命令模式.输入模式.末行模式.掌握这三种模式十分 ...

  6. UIScreen类

    CGRect screenBounds = [ [UIScreen mainScreen]bounds];//返回的是带有状态栏的Rect NSLog(@"%@", NSStrin ...

  7. debian安装mysql

    http://thirteen-tw.blogspot.com/2008/09/debian-mysql-server.html 安裝MySQL-Server debian:~# apt-get in ...

  8. pthread_t结构的定义

    linux下是这样定义的: 在linux的实现中pthread_t被定义为 "unsigned long int",參考这里 Windows下这样定义: /* * Generic ...

  9. Android 打造自己的个性化应用(三):应用程序的插件化

    在android的项目开发中,都会遇到后期功能拓展增强与主程序代码变更的现实矛盾,也就是程序的灵活度. 由于linux平台的安全机制,再加上dalvik的特殊机制,各种权限壁垒,使得开发一个灵活多变的 ...

  10. 一道movfuscator混淆过的简单逆向

        月赛中出了道经过movfuscator混淆的逆向题目,记录一下过程.跑起来发现需要用户输入长度为20的字符串,我尝试着输入了几次都是直接退出了,没有任何提示.用IDA打开,题目里面几乎全是mo ...