- 使用Spring的JDBC来实现DAO的功能:
准备工作:
1):准备依赖的jar.
mysql-connector-java-5.1.11.jar:MySQL驱动包
druid*.jar :连接池包
spring-jdbc-4.1.2.RELEASE.jar:支持JDBC
spring-tx-4.1.2.RELEASE.jar: 支持事务
2):建立t_employee表和Employee对象.
3):编写DAO组件(接口/实现类/测试类) -
JdbcTemplate需要注入DataSource属性,JdbcDaoSupport需要注入吗?内部类处理结果集
-
分析转账过程流程:
① 首先,获取DataSource对象;
② 其次,获取DataSource中的Connection对象;
③ 接着,设置取消事务的自动提交方式: connection.setAutoCommit(false);
④ 然后,把connection绑定到当前线程中;
⑤ 在dao方法中,从当前线程中获取Connection对象
⑥ 如果正常执行,则提交事务:提交事务:connection.commit();
如果出现异常,则回滚事务:回滚事务:connection.rollback();就是释放资源(表所行级) -
Spring的事务管理主要包括3个接口:
TransactionDefinition:封装事务的隔离级别,超时时间,是否为只读事务和事务的隔离级别和传播规则等事务属性,可通过XML配置具体信息。
PlatformTransactionManager:根据TransactionDefinition提供的事务属性配置信息,创建事务。
TransactionStatus:封装了事务的具体运行状态。比如,是否是新开启事务,是否已经提交事务,设置当前事务为rollback-only等。--------------------------------------------------------------------------------
Spring支持编程式事务管理和声明式事务管理。
编程式事务管理:事务和业务代码耦合度太高。
声明式事务管理:侵入性小,把事务从业务代码中抽离出来,提供维护性。 -
Spring的事务管理:
1,PlatformTransactionManager:接口统一抽象处理事务操作相关的方法;spring自己在做,不需自己写
1):TransactionStatus getTransaction(TransactionDefinition definition):
根据事务定义信息从事务环境中返回一个已存在的事务,或者创建一个新的事务,并用TransactionStatus描述该事务的状态。
2):void commit(TransactionStatus status):
根据事务的状态提交事务,如果事务状态已经标识为rollback-only,该方法执行回滚事务的操作。
3):void rollback(TransactionStatus status):
将事务回滚,当commit方法抛出异常时,rollback会被隐式调用
2,在使用spring管理事务的时候,首先得告诉spring使用哪一个事务管理器;
3,常用的事务管理器:
DataSourceTransactionManager:使用JDBC,MyBatis的事务管理器;
HibernateTransactionManager:使用Hibernate的事务管理器; -
事务方法属性:
1,name:匹配到的方法模式;name=“trans”什么意思?
2,read-only:如果为true,开启一个只读事务,只读事务的性能较高,但是不能再只读事务中,使用DML;默认可读性
3,isolation:代表数据库事务隔离级别(就使用默认)
DEFAULT:让spring使用数据库默认的事务隔离级别;
其他:spring模拟;
4,no-rollback-for: 如果遇到的异常是匹配的异常类型,就不回滚事务;
5,rollback-for:如果遇到的异常是指定匹配的异常类型,才回滚事务;
spring默认情况下,spring只会去回滚RuntimeException及其子类,不会回滚Exception和Thowable.
6,propagation:事务的传播方式(当一个方法已经在一个开启的事务当中了,应该怎么处理自身的事务)
1,REQUIRED(默认的传播属性):如果当前方法运行在一个没有事务环境的情况下,则开启一个新的事务,如果当前方法运行在一个已经开启了的事务里面,把自己加入到开启的那个事务中
2,REQUIRES_NEW:不管当前方法是否运行在一个事务空间之内,都要开启自己的事务 -
声明式事务管理:开启事务注解<tx:annotation-driven transaction-manager=”txManager”/>
在类或相应方法上贴@Transactional(readOnly='',propagation isolation )
spring-03
最新推荐文章于 2022-09-01 22:00:04 发布