Spring框架总结(4)
其他
2018-07-30 18:30:25
阅读次数: 0
JDBCTemplate&事务
- JDBCTemplate
- Spring也提供了自己的持久层,即JDBCTemplate,它是对JDBC的简单封装
- JDBCTemplate类常用的操作
- update()
- query()
- 使用JDBCTemplate的流程
- 由Spring创建数据源(DataSource),即数据库连接池
- <!-- 注入DataSource(连接池) -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" >
<property name="user" value="root"></property>
<property name="password" value="root"></property>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/mytest"></property>
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
</bean>
- 由Spring创建JDBCTemplate
- <!-- jdbc模板 -->
<bean id="jdbc" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
- 自定义DAO,并注入JDBCTemplate,之后使用JDBCTemplate类方法(上述 ②)
- Spring中的事务分为两种
- 编程式事务
- 声明式事务
- 定义声明式事务的步骤
- 创建事务管理器和@Transaction注解驱动
- 给Service相应的方法加上@Transaction注解
- 总结一下注解
- 创建Bean:@Component,@Repository,@Service,@Controller
- 注入:@Autowired,@Resource,@Inject
- AspectJ:
- @Aspect
- @Before,@After,@Around,@AfterReturning,@AfterThrowing
- 事务:@Transactional
- 事务的四个特性:ACID
- 原子:事务包含的所有操作要么全部成功,要么全部失败回滚
- 一致:事务必须使数据库从一个一致性状态变换到另一个一致性状态
- 隔离:多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰
- 不考虑隔离会产生的问题
- 脏读:在一个事务处理过程里读取了另一个未提交的事务中的数据
- 不可重复读:在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了
- 虚读(幻读):针对一批数据,两次读期间被另一个事务增加了若干记录
- 隔离级别:级别越高,一致性越好,并发性越差
- Serializable (串行化):可避免脏读、不可重复读、幻读的发生。
- Repeatable read (可重复读):可避免脏读、不可重复读的发生。
- Read committed (读已提交):可避免脏读的发生。
- Read uncommitted (读未提交):最低级别,任何情况都无法保证。
- 持久:一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的
- 事务的传播特性
- 当两个(或更多)事务方法合并到一起时,合并后的行为成为传播特性
- Spring中包括7种传播特性
- 事物的传播特性可以通过@Transactional的propagation属性来设置,例如:@Transactional(propagation=REQUIRED)
- REQUIRED:需要一个事务;有但合并,无则创建新事务
- REQUIRES_NEW:需要一个新事务;有则将外部事务挂起,并创建新事务,无则创建新事务
- SUPPORTS:支持事务,在一个事务内,合并;否则不支持事务(自动提交)
- NOT_SUPPORTS:不支持事务;无论是否放在事务方法中都不支持
- NEVER:不能放在事务方法中,否则抛出异常
- MANDATORY:必须放在事务中,否则抛出异常
- NESTED:内置事务;
- 如果没放在一个事务中,开启新事务;
- 如果放在一个事务中:
- 内部事务如果异常:外部可以捕获,并提交外部事务
- 外部事务如出异常:即使内部无异常,整个事务回退
- 设置回退事务属性
- 默认情况下,遇到RuntimeException及ERROR,事务回退;而出现Exception(受检查异常)则不会回退
- 可以通过rollbackFor,noRollbackFor来设置何种异常回退,何种异常提交(不回退)
- 设置事务的只读属性
- 对于不参与事务的读取操作,可使用read-only=true对数据访问做一些优化
- 超时
- timeout,时间单位是秒
- 当事务执行超时时自动回退
转载自blog.csdn.net/addkai/article/details/81213368