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
<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语言的只有函数没有其他的思想是不是最好的。