11-16 Spring整合Mybatis

Spring整合Mybatis

目的: 1.把Mybatis的核心对象SqlSessionFactory交给Spring管理注入数据源对象

2.把Mybatis的配置中数据源对象,交给Spring管理

3.把Mybatis的Mapper接口的代理对象交给Spring管理注入SqlSessionFactory

4.把事务作为通知,使用AoP技术,动态织入业务层的方法: Spring提供的声明式事务管理

5.把业务层的对象交给spring管理,注入Mapper代理对象

开始创建

1.创建项目: web项目

2添加依赖C3po连接池 数据库驱动,mybatis , spring

改改web.xml

spring依赖统一

orm -> jdbc tx(事务增强管理) 导入一个就可以了

整合jar包

添加配置文件在Resource: log4j的配置,数据源的配置,mybatis主配置

在spring配置文件中配置向相关的bean

之前配置数据源

<Conguration>

<property>....... jdbc url

</Conguration>

现在:

mysql5驱动没有cj

mysql有cj,可以用mysql5那个,但是会有警告,表示已经弃用

测试是否导入成功:

@RunWith 整合

加日志插件

事务的传播行为

当涉及到事务的传播行为时,可以通过一个简单的图示来说明不同的传播行为。

复制代码+---------------------+        +---------------------+
|        Method A     |               |        Method B     |
|                     |               |                     |
|   @Transactional    |               |                     |
|   public void a() { |               |                     |
|                     |               |                     |
|       // 业务逻辑    |               |                     |
|                     |               |                     |
|       b();          |               |                     |
|                     |               |                     |
|       // 业务逻辑    |               |                     |
|                     |               |                     |
|   }                 |               |                     |
|                     |               |                     |
+---------------------+               +---------------------+

在上面的图中,有两个方法:Method A 和 Method B。Method A 上使用了 @Transactional 注解,表示该方法是一个事务方法。

接下来,我们将根据不同的传播行为来解释事务在方法调用链中的传播方式。

  1. REQUIRED 传播行为:

复制代码+---------------------+               +---------------------+
|        Method A     |               |        Method B     |
|                     |               |                     |
|   @Transactional    |               |                     |
|   public void a() { |               |                     |
|                     |               |                     |
|       // 业务逻辑    |               |                     |
|                     |               |                     |
|   >>> b();          |               |                     |
|                     |               |                     |
|       // 业务逻辑    |               |                     |
|                     |               |                     |
|   }                 |               |                     |
|                     |               |                     |
+---------------------+               +---------------------+

在 REQUIRED 传播行为下,当 Method A 调用 Method B 时,Method B 会加入到 Method A 的事务中,并与 Method A 同步运行。如果 Method A 已经存在事务,那么 Method B 将在该事务中执行;如果 Method A 没有事务,那么 Method B 将开启一个新的事务。

  1. SUPPORTS 传播行为:

复制代码+---------------------+               +---------------------+
|        Method A     |               |        Method B     |
|                     |               |                     |
|   @Transactional    |               |                     |
|   public void a() { |               |                     |
|                     |               |                     |
|       // 业务逻辑    |               |                     |
|                     |               |                     |
|   >>> b();          |               |                     |
|                     |               |                     |
|       // 业务逻辑    |               |                     |
|                     |               |                     |
|   }                 |               |                     |
|                     |               |                     |
+---------------------+               +---------------------+

在 SUPPORTS 传播行为下,当 Method A 调用 Method B 时,Method B 会根据当前是否存在事务来决定是否加入到事务中。如果 Method A 存在事务,那么 Method B 也会加入到该事务中;如果 Method A 不存在事务,那么 Method B 将以非事务方式运行。

或者log.debug(dataSource.toString())

配置SqlSessionFactory的Bean的对象

transction:事务

Aliases:别名

记得要有实体类和实体类的包

或者换一种简便的写法

接入别名对应的包

map代理对象交给Spring管理

把之前的导入进来

此时mapper代理对象交给Spring管理

三个bean

跟service业务层整合

1.事务控制 用AOP方式(提供的声明式事务管理)

事务的概念是什么?

事务:同一个事务下,一组SQL要就全部成功,要就全部失败事务:四大特征: AcID 原子性,隔离性,一致性,持久性

事务是加在业务层

Spring事务管理分类: ·编程式的事务管理,手动在业务层方法中,进行事务控制,对代码进行精确事务控制,代码复杂

·声明式事务管理: Spring提供xml/注解进行事务配置,

TransactionDefinition是事务的定义信息对象,事务描述

编程式的事务管理

步骤: 1,开启事务

2,提交事务(正常执行)/回滚事务(产生异常)

3.

配好事务管理器:

业务层:

开启扫描

注解才有用

失败的demo

编程式事务改造:

接口 -> 找找实现类 -> 构造方法

成功提交事务 失败回滚事务

TransactionStatus 事务状态

声明式的事务管理

  1. spring-tx提供的事务增强的通知类,只需要进行织入

导入tx的命名空间

配置事务控制类(增强类)

事务的隔离级别?4种

image-20231116095659551

image-20231116095728354

脏数据:没有提交的数据 只是读了,但是没有提交 必须读到对方提交的数据

事务的传播机制/行为?掌握required(增删改) 和 supports(查询用)两种就可以了
  1. REQUIRED:如果当前已经存在一个事务,那么方法将加入到该事务中一起执行;如果当前没有事务,那么方法将开启一个新的事务来执行。

  2. REQUIRES_NEW:无论当前是否存在事务,方法都会开启一个新的事务来执行。如果当前已经存在事务,那么该事务会被挂起,直到新的事务执行完成。

  3. SUPPORTS:如果当前已经存在一个事务,方法将加入到该事务中一起执行;如果当前没有事务,方法将以非事务方式执行

name:代表匹配方式

此时没有织入,只是配置了事务的通知

3.进行与业务层的方法进行织入

配置切入点

此时我们的方法就有事务了 哈哈哈哈哈哈哈

数据库不会改

取消注释之后正常执行

2.业务层的bean交给spring管理

3.整合web层(之前学过)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值