Springboot整合mabatis
整合步骤【注】
【第一步】添加依赖,创建模块的时候勾选mybatis-spring-boot-starter
【第二步】在application.yml中配置数据源连接参数
【第三步】定义Mapper接口,编写方法和SQL。在引导类使用@MapperScan()加载指定包中的所有Mapper接口。
【第四步】在都需要的地方(service层、单元测试)中注入mapper对象,调用方法。
mybatis相关配置,在配置文件中设置(重点)
# 连接数据库的环境信息
spring:
datasource:
# driver-class-name: com.mysql.jdbc.Driver
driver-class-name: com.mysql.cj.jdbc.Driver #【必须配】
url: jdbc:mysql://localhost:3306/spring?useSSL=false&serverTimezone=Asia/Shanghai #【必须配】
username: root #【必须配】
password: root #【必须配】
# type: com.alibaba.druid.pool.DruidDataSource #使用Druid连接池
type: com.zaxxer.hikari.HikariDataSource #默认也是使用HikariDataSource连接池,可以不用配置【了解】
hikari: #【了解】
maximum-pool-size: 10 # 最大连接数【了解】
minimum-idle: 3 # 最小连接数【了解】
#mybatis相关配置
mybatis:
configuration:
map-underscore-to-camel-case: true #开启驼峰命名映射 #【很常用】
mapper-locations: classpath*:mapper/*Mapper.xml #加载mapper目录中所有Mapper结尾的映射配置文件#【很常用】
type-aliases-package: com.itheima.pojo #配置别名,映射配置文件中resultType属性就可以使用别名【了解】
# config-location: classpath:mybatis-config.xml #加载mybatis核心配置文件,如果有的话【了解】
# 设置项目的日志级别
logging:
level:
# root: debug # 整个项目的debug级别的日志信息全部输出,太多了,往往不需要这么多。
com.itheima.mapper: debug # 整个项目的debug级别的日志信息全部输出,太多了,往往不需要这么多。 #【很常用】
Spring事务管理
需求:银行转账
基础业务实现
配置初始化库
【第一步】将DDL语句(创建数据库和表)定义到resources/schema.sql中,将DML语句(增删改)定义resources/data.sql中。
【第二步】在application.yml中开启SQL初始化
事务管理-快速入门
在类/接口/方法上使用@Transactional注解开启事务管理
事务原理
pring底层会使用AOP给service创建代理对象,我们使用的实际是代理对象,在代理对象内部使用JdbcTransactionManager对象来管理事务,包括开启事务、提交事务、回滚事务这三个操作
拔高-事务失效(编译期异常所致)
-rollbackFor解决
场景:在业务层方法中抛出了编译期异常
解决:需在@Transactional注解中使用rollbackFor属性指定要回滚的异常。@Transactional(rollbackFor = Exception.class)
拔高-事务失效(捕获异常所致)
场景:在业务层方法中对异常进行了try…catch处理,代理对象感知不到异常
解决:业务方法内不要捕获异常或者将捕获的异常重新抛出。
拔高-事务的传播行为
拔高-传播行为失效
场景:当我们业务层方法直接调用了本类方法,相当于使用this调用,this表示目标对象,使用目标对象调用方法就会导致事务的传播行为失效。
解决:在业务类中注入service的代理对象,使用代理对象调用方法。此时可能会有set方式循环依赖产生,需要我们在application.yml中配置运行set方式循环依赖。