事务管理
事务是数据库操作基本单元,多个操作形成成一个逻辑整体,操作类似于连坐惩罚,一一步错误,全部错误。只有全部通过才算成功。
ACID特性
1.原子性(Atomicity)事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用。
2.一致性(Consistency)事务在完成时,必须是所有的数据都保持一致状态。
3.隔离性(Isolation)并发事务执行之间无影响,在一个事务内部的操作对其他事务是不产生影响,这需要事务隔离级别来指定隔离性。
4.持久性(Durability)一旦事务完成,数据库的改变必须是持久化的。事务隔离级别
事务隔离级别
TRANSACTION_NONE JDBC 驱动不支持事务
TRANSACTION_READ_UNCOMMITTED 允许脏读、不可重复读和幻读。
TRANSACTION_READ_COMMITTED 禁止脏读,但允许不可重复读和幻读。
TRANSACTION_REPEATABLE_READ 禁止脏读和不可重复读,单运行幻读。
TRANSACTION_SERIALIZABLE 禁止脏读、不可重复读和幻读。
隔离级别越高,意味着数据库事务并发执行性能越差,能处理的操作就越少。你可以通过conn.setTransactionLevel去设置你需要的隔离级别。
JDBC规范虽然定义了事务的以上支持行为,但是各个JDBC驱动,数据库厂商对事务的支持程度可能各不相同。
出于性能的考虑我们一般设置TRANSACTION_READ_COMMITTED就差不多了,剩下的通过使用数据库的锁来帮我们处理别的,关于数据库的锁这个之后再说。
了解了基本的JDBC事务,那有了Spring,在事务管理上会有什么新的改变呢?
有了Spring,我们再也无需要去处理获得连接、关闭连接、事务提交和回滚等这些操作,使得我们把更多的精力放在处理业务上。事实上Spring并不直接管理事务,而是提供了多种事务管理器。他们将事务管理的职责委托给Hibernate或者JTA等持久化机制所提供的相关平台框架的事务来实现。
由于业务相关的处理都放在业务层,所以事务通常放在业务层
创建service层
配置文件
最后在业务层添加注解@Transactional
注解属性
基于配置
spring mybatis 整合
创建mybatis配置文件 mybatis-config.xml
创建dao层接口
创建映射文件,放在resourses文件下,和dao接口的层级保持一致,以及名字保持一致
注意:namespace 命名空间,指向接口。 方法id和dao层接口里的方法名保持一致。
创建service接口
创建service实体类
创建整合配置文件
测试
输出结果
如果输出结果为null,如下这样
可能是因为数据库字段名和实体类属性名不匹配,如果满足驼峰命名,那么在mybatis配置文件中开启驼峰命名规则,要么就设置别名。