栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java框架--spring(四、事务管理、事务传播、spring整合mybatis)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java框架--spring(四、事务管理、事务传播、spring整合mybatis)

Java框架--spring(四、事务管理、事务传播、spring继承mybatis
  • 事务管理
    • 编程式事务
    • 声明式事务
      • 基于xml实现
      • 基于注解实现
  • 事务传播
    • 声明式事务不生效的场景
  • spring整合mybatis
    • 1. 导入 jar 包
    • 2. 配置spirng.xml文件
    • 3. 配置spring_mybaits.xml
    • 4. 配置mybaits.xml
    • 5.配置数据库连接db.xml
    • 6. 配置config.properties文件
    • 7. 配置日志文件log4j.properties

事务管理

事务:看作一次对数据的若干操作组成的一个序列,是一个整体的过程,要么成功要么都不成功(转账)
JdbcTemplate默认使用jdbc的事务,提交事务,自动的(执行完自动提交)
spirng中提供了事务管理

编程式事务

注入TransactionTemplate事务管理对象,在提交事务or回滚事务时,用代码实现

声明式事务

声明式事务是基于AOP实现的,本质是对方法前后进行拦截

有xml和注解两种实现方式
配置事务管理器

 
 
	 

基于xml实现

    
        
    

 

	
    

基于注解实现
 

在service层控制事务

@Service(value="userservice") 
@Transactional(propagation=Propagation.REQUIRED)
事务传播

一个事务方法被另一个事务方法调用时,该方法如何执行

7种传播行为

事务传播行为说明
PROPAGATION_REQUIRED如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。
PROPAGATION_SUPPORTS支持当前事务,如果当前没有事务,就以非事务方式执行
PROPAGATION_MANDATORY使用当前的事务,如果当前没有事务,就抛出异常
PROPAGATION_REQUIRES_NE W新建事务,如果当前存在事务,把当前事务挂起
PROPAGATION_NOT_SUPPOR TED以非事务方式执行操作,如果当前存在事务,就把当前事务 挂起
PROPAGATION_NEVER以非事务方式执行,如果当前存在事务,则抛出异常
PROPAGATION_NESTED如果当前存在事务,则在嵌套事务内执行。如果当前没有事 务,则执行与 PROPAGATION_REQUIRED 类似的操作

重点了解这三个

  1. PROPAGATION_REQUIRED:
    指定的方法必须在事务内执行
    当前存在事务就加入到事务中,没有事务新建一个事务
    是spring的默认传播行为

  2. PROPAGATION_SUPPORTS:
    支持当前事务,若当前没有事务,就以非事务方式执行

  3. PROPAGATION_REQUIRES_NEW:
    总是新建一个事务,若当前存在事务,将当前事务挂起,直到新建事务结束

声明式事务不生效的场景
  • @Transactional 应用在非 public 修饰的方法上
  • @Transactional 注解属性 propagation 设置错误
  • 同一个类中方法调用,导致@Transactional 失效
  • 异常被 catch 捕获导致@Transactional 失效
  • 数据库引擎不支持事务(MySQL中InnoDB是支持事务的)
spring整合mybatis

集成mybaits的原理就是将SqlSessionFactory交给spring来管理,由spring管理对dao接口的代理实现

1. 导入 jar 包

mybatis



    org.mybatis
    mybatis
    3.4.2

mybatis-spring整合包


    org.mybatis
    mybatis-spring
    1.3.1

mysql-connector-java 数据库驱动



     mysql
     mysql-connector-java
     8.0.16

spring相关jar包



    org.springframework
    spring-context
    5.2.2.RELEASE




    org.springframework
    spring-jdbc
    5.2.2.RELEASE




    org.springframework
    spring-aspects
    5.2.2.RELEASE




     com.alibaba
     druid
     1.1.10

2. 配置spirng.xml文件






3. 配置spring_mybaits.xml

配置 sqlSessionFactory,指定生成接口代理



    
    
    




    
    

4. 配置mybaits.xml



    
        
        
        
        
        
        
        
        
        
    

    
        
    



5.配置数据库连接db.xml


    
    

    
    
        
        
        
        
        
        
    

    
    
        
    

    
    
6. 配置config.properties文件
# jdbc驱动
driver=com.mysql.cj.jdbc.Driver
# 连接数据库地址
url=jdbc:mysql://127.0.0.1:3306/ssm?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
# 数据库用户名,用于连接数据库
uname=root
# 用户密码(用于连接数据库)
pwd=lanlei6843
#连接池初始化时初始化的数据库连接数
initialSize=10
#连接池支持的最大连接数
maxActive=20
7. 配置日志文件log4j.properties
log4j.rootLogger=debug,stdout,D
#System out Console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%p] %d{yyyy-MM-dd HH:mm:ss,SSS} %m%n
#System out File
log4j.appender.D=org.apache.log4j.FileAppender
log4j.appender.D=org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File=E://logs/log.log
log4j.appender.D.Append=true
log4j.appender.D.layout=org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ] -[%l] %m%n
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/952882.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号