java事务和0配置结合mybatis(不用springmvc和springboot)
-
什么是事务
事务就是一系列的动作,他们被当做一个单独的工作单元,要么
全部完成,要么全部不起作用。 -
事务的特点(ACID:取4个特点的首字母)
1.原子性(atomicity):所有的操作要么全部做完要么全部不做,在执行过程中出错,会回滚到开始前的状态,事务整体不可再分。
2.一致性(consistency):事务开始前后,数据库的完整性没有发生改变。
3.隔离性(isolation):同一时间,只允许一个事务请求同一数据,不同事务之间互不干扰。
4.持久性(durability):事务完成后,事务对数据库的所有更新都是长久性的,不能回滚。 -
事务的并发问题
1.脏读:比如事务a读取了事务b更新的数据,然后b回滚操作,就叫脏读。
2.不可重复读:事务a多次读取同一数据,事务b在事务a的读取过程中更新并提交,导致事务a多次读取数据不一致(多侧重于修改)。
3.幻读:事务a在添加数据的过程中,事务b同时添加数据(幻读多侧重于增删)。 -
spring的事务配置
1.xml方式配置
2.声明方式配置 -
spring事务的传播属性
1.REQUIRED:如果当前没有事务就新建,有就加入,默认REQUIRED,相互影响。
2.REQUIRED_NEW:新建事务,如果当前存在事务则把当前事务挂起,互不影响。
3.NESTED:如果当前存在事务,则嵌套内执行,没有就新建,内不影响外,外影响内。
4.SUPPORTS:支持当前事务,如果没有事务就按普通方法执行。
5.NOT_SUPPORTED:强制不使用事务,有事务也挂起。
6.NEVER:强制不使用事务,如果当前事务存在抛异常。
7.MANDATORY:强制使用事务,如果没使用抛异常。
spring设置传播属性的方法 -
事务的隔离级别
1.DEFAULT:级别最低。
2.READ_UNCOMMITTED:会出现脏读,不可重复读,幻读问题。
3.READ_COMMITTED:可以表面脏读,但不可重复度和幻读仍然存在(默认)。
4.REPEATABLE_READ:解决脏读和不可重复读,有幻读问题。
5.SERIALIZABLE:级别最高,避免所有并发问题,但性能低下。 -
spring与mybatis结合
1.导入相应的包
2.创建数据源,设置连接池,这里采用阿里巴巴的德鲁伊连接池。
3.配置session工厂
4.配置sqlSessionTemplate(选配)
5.编写dao和service