视频链接:https://www.bilibili.com/video/BV1q94y1o7ts?vd_source=9545770e4a2968c05878ffac8589ec6c 视频选集:P77— P101
Spring 集成MyBatis【SM整合】
将MyBatis与 Spring进行整合,主要解决的问题就是将 SqlSessionFactory对象交由Spring来管理。所以,该整合只需要将SqlSessionFactory的对象生成器SqlSessionFactoryBean注册在 Spring 容器中,再将其注入给Dao 的实现类即可完成整合。实现 Spring 与 MyBatis的整合。常用的方式:扫描的 Mapper动态代理。Spring 像插线板一样,mybatis框架是插头,可以容易的组合到一起。插线板spring插上 mybatis,两个框架就是一个整体。
1.SM整合之创建表
2.SM整合的步骤
- 建表
- 搭建项目,选择quickstart模板
- 修改目录
- 修改pom.xml文件,添加相关的依赖
- 添加MyBatis相应的模板(SqlMapconfig.xml和XXXMapper.xml文件)
- 添加SqlMapConfig.xml文件(MyBatis核心配置文件),并拷贝jdbc.propertiest属性文件到resources目录下
- 添加applicationContext_mapper. xml
- 添加applicationContext_service. xml
- 添加Users实体类,Accounts实体类
- 添加mapper包,添加UsersMapper接口和UsersMapper.xml文件并开发
- 添加service包,添加UsersService接口和UsersServiceImpl实现类
- 添加测试类进行功能测试
3.SM整合之pom.xml文件的修改
添加的依赖:
build:
4.添加数据库的可视化
最终效果:
5.SM整合
5.1 添加MyBatis相应的模板(SqlMapconfig.xml和XXXMapper.xml文件)
File->Settings
5.2 添加SqlMapConfig.xml文件(MyBatis核心配置文件)
最终效果:
5.3 添加applicationContext_mapper. xml
这个文件主要是:
- 读取属性文件jdbc.properties
- 创建数据源
- 配置SqlSessionFactoryBean类
- 注册mapper.xml文件
拷贝jdbc.propertiest属性文件到resources目录下
编写applicationContext_mapper. xml文件: 然后根据applicationContext_mapper. xml文件修改SqlMapConfig.xml文件:【两套配置会冲突】
5.4 添加applicationContext_service. xml
先创建文件: 编写:
5.5 Users实体类开发
5.6 mapper层的开发
创建接口: 在同一目录下,定义相同名字的xml文件:【使用模板】
5.7 service层的开发
定义接口: 实现类:
5.8 测试
在service.xml文件中导入mapper.xml文件 运行结果:
5.9 账户(account)增加一整套
创建账户类: 在mapper中创建接口: 在同一目录下,定义相同名字的xml文件:【使用模板】 在service中创建接口: 实现类: 测试:
6.事务
6.1 添加注解事务效果演示
当项目中出现问题时候,数据依然能增加成功 我们希望无论出现什么错误都不添加:添加注解事务 然后再进行插入数据:【虽然显示插入成功,但是后面依然撤销】
6.2 添加不回滚属性设置
如何在当前事务中规定,发生错误不撤销
6.3 @Transactional参数详解
6.4 Spring添加事务的两种方式
- 注解式的事务
使用@Transactional注解完成事务控制,此注解可添加到类上,则对类中所有方法执行事务的设定.此注解可添加到方法上,只是对此方法执行事务的处理. - 声明式事务(必须掌握)
在配置文件中添加一次,整个项目遵循事务的设定
6.5 事务的隔离级别
使用数据库默认的隔离级别isolation = Isolation.DEFAULT
6.6 为什么在MyBatis种添加事务管理器
事务管理器用来生成相应技术的连接+执行语句的对象. 注意:使用了DataSourceTransactionManager就可以生成SqlSession,然后完成提交和回滚
6.7 事务的传播特性概念
多个事务之间的合并,互斥等都可以通过设置事务的传播特性来解决.
6.8 改造项目完成嵌套调用【事务的传播特性讲解】
项目中的所有事务,必须添加到业务逻辑层上 UsersServiceoImpl为A事务,AccountsServiceImpl为B事务,现在让A事务包含B事务
在A事务中做改变: 在B事务中先将@Transactional注销掉 测试:
-
A和B都没有事务 测试Users【因为A事务包含B事务】 没有事务控制,两个都插入成功,虽然在控制台报错 -
A无事务,B有REQUIRED A插入成功,B回滚,没有插入成功 -
A有REQUIRED,B无事务 A,B都没成功,都回滚了
后面的和前面的操作方式类似,最终汇总:
6.9 声明式事务的实现
注解式事务可能对一个类中的所有的方法都影响 Spring非常有名的事务处理方式.声明式事务.要求项目中的方法命名有规范
配置事务切面时可以使用通配符*来匹配所有方法
新的配置文件的框架: 编写后: 将注解全去掉: 测试:
还可以加不回滚:
6.10 设置事务处理的优先级
在某个类中通过注解屏蔽声明式设定【近水楼台先得月】,局部影响到整体
设置局部的优先级:
设置全局优先级:
7.课程总结
7.1 什么是Spring框架以及优点
7.2 IOC
7.3 AOP 面向切面编程
AspectJ框架:
7.4 事务
|