事物管理
1)Spring在不同的事物管理API之上定义了一个抽象层,程序开发人员不需要了解底层的事物管理API,就可以使用Spring的事物管理机制。
2)Spring支持编程式事务管理,也支持声明式的事务管理。
编程式事务管理:将事务管理代码嵌入到业务方法中来控制事务的提交和回滚,在编程式管理事务时,必须在每个事务操作中包含额外的事物管理代码。
声明式事务管理:大多数情况下比编程式事务管理更好用,将事务管理代码从业务方法中分离出来,以声明的方式来实现事务管理。事务管理作为一种横切关注点,可以通过AOP方法模块化。Spring通过Spring AOP 框架支持声明式事务管理。
事物管理器
1)Spring从不同的事务管理API中抽象出一整套完整的事务机制。开发人员不必了解底层的事务API,就可以利用这些事务机制,有了这些事务机制,事务管理代码就可以独立于特定的事务技术了。
2)Spring核心事务管理抽象是 interface Platform TransactionManagement管理封装了一组独立于技术的方法.无论使用Spring的哪种事务管理策略(编程式或声明式),事务管理器是必须的。
Spring支持的事务传播行为
1)required:如果有事务在运行,当前的方法就在这个事务内运行,否则就启动一个新的事务,并在自己的事务内运行。
2)required_NEW: 当前的方法必须启动新事务,并在它自己的事务内运行,如果有事务正在运行,应该挂起。
3)supports:如果有事务在运行。当前的方法就在事务内运行,否则它可以不运行在事务中。
4)not_supproted:当前的方法不应该运行在事务中,如果有运行的事务停止。
5)mandatory:当前的方法必须运行在事务内部,如果没有正在运行的事务,则抛出异常
6)never:当前的方法不应该运行在事务中,如果有运行的事务,则抛出异常。
7)nested:如果有事务在运行,当前的方法就应该在这个事务的嵌套事务内运行,否则就启动一个新的事务,并在它自己的事务内运行。
整合Hibernate
依赖的包:commons-dbcp、commons-pool
<!--配置数据源-->
<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/hibernate"/>
<property name="username" value="root"/>
<property name="password" value="dist888"/>
</bean>
<!--配置sessionFactory-->
<bean id="mySessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">//hibernatex表示支持的hibernate版本
<property name="dataSource" ref="myDataSource"/>
<property name="mappingResources">
<list>
<value>/com/po/Person.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">//对hibernate的配置项
<value>
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
current_session_context_class=thread
show_sql=true
formart_sql=true
</value>
</property>
</bean>