传智博客——传说中最复杂的框架——Spring(三)

         Spring的第三天是浆糊一般的第三天,因为Spring整合了数据库。天啦,Hibernian刚搞的迷迷糊糊的又来个Spring整合。

         一 Spring中使用JDBC

           1,配置数据源

<bean id="dataSource" class="..dbcp.BasicDataSource">
       <property name="driver" value="" />
              <value>${database.driver}</value>
       </property>
</bean>

            2,使用Jdbc模板

   <bean id="jt" class="..JdbcTemplate"/>
       <property name="datasource" ref="ds" />
  </bean>

            模板的作用就是封装了JDBC繁琐的操作,以前在写JDBC的时候,整段代码都是开会话,开事物,提交事务,关会话,仅仅就中间增删改查代码的不同而已。

            二 在Spring中使用Hibernate

<bean id="dataSource" class="Xxx">
         <property name="xxx" value="" />
</bean>

首先是数据源,不管什么持久化方式,数据源是必不可少的。

<bean id="sessionFactory" class="...LocalSessionFactoryBean"/>
         <property name="dataSource" ref="dataSource" />
</bean>

本地会话工厂bean是Spring整合Hibernate的核心。因为以前hibernate。properties里面的各种属性如今都写进了LocalSessionFactoryBean

一个比较完整的 LocalSessionFactoryBean

<bean id="sf" class="..LocalsessionFactoryBean">
      <property name=" hibernateProperties ">
          <props>
               <prop key="hibernate.dialect">...<prop>
          </props>
      </property>
      <property name="mappingResources">
          <list>
               <value>student.hbm.xml</value>
               <value>Course.hbm.xml</value>
          </list>
        </property>
    </bean>
可以看到映射实体文件是通过property节点的 来实现的。list里面的value值既可以是具体的文件,也可以是一个目录。
实体与sessionfactory发生关系的代码
<bean id="studentdao" class="StudentDaoImpl">
     <property name="hibernateTemplate" ref="sf" />
 </bean>

很简单只要在实体的property属性离ref=sessionfactory即可。

           三 事务管理

             事物管理出现的原因:个人理解是事务本身是DAO层的事情,但受制于业务逻辑,所以就出现了矛盾,在DAO层Spring没有具体实现,所以没有相应的API,所以就出现了Spring所特有的管理事务的方式

        1,事务的概念

   atomic:要么都发生,要么都不发生。
   consistent:数据应该不被破坏。
   Isolated:用户间操作不相混淆
   Durable:永久保存

         2,Spring的事务托管

            Spring没有直接实现事务管理,而是将管理事务委托给具体平台
org.springframework.jdbc.datasource.DataSourceTransactionManager 在单一的JDBC Datasource中的管理事务
org.springframework.orm.hibernate.HibernateTransactionManager 当持久化机制是hibernate时,用它来管理事务
org.springframework.jdo.JdoTransactionManager 当持久化机制是Jdo时,用它来管理事务。
org.springframework.transaction.jta.JtaTransactionManager 使用一个JTA实现来管理事务。在一个事务跨越多个数据源时使用
org.springframework.orm.ojb.PersistenceBrokerTransactionManager 当apache的ojb用作持久化机制时,用它来管理事务。

         3 Hibernate事务:
<bean id="transactionManager"
      class="…HibernateTransactionManager">
      <property name="sessionFactory" ref="sf" />
</bean>
其中sessionFactory属性必须和一个Hibernate的SessionFactory绑定
HibernateTransactionManager把事务管理委托给一个从Hibernate
session 中取得的net….Transaction对象。当一个事务成功完成时,
HibernateTransactionManager将调用Transaction对象的commit()
方法。类似的,当一个事务失败时,Transaction对象的rollback()方
法将被调用。

学习总结:三天的Spring学完了,感觉Spring这种反转控制的思想深不可测,甚至潜力无限,而在AOP面向切面编程,把在对象作为一等公民的java语言里函数提升为了一等公民,我甚至都在想c语言的只有函数没有其他的思想是不是最好的。


 


 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值