Spring5
Spring 概念
框架概述:
- Spring是一个轻量级的开源的JAVAEE框架
关键词:
(1)轻量级
(2)开源
(3)框架
- 可以解决企业应用开发的复杂性
- Spring两个核心的部分:IOC和AOP
(1)IOC:控制反转,将创建对象的过程交给Spring进行管理
(2)AOP:面向切面,不修改源代码的情况下,进行功能的添加和增强
- Spring的特点
(1)方便解耦(耦合性降低),简化开发
(2)Aop编程的支持
(4)方便程序的测试
(5)方便和其他框架进行整合
(6)降低API(如JDBC)开发难度
(7)方便进行事务的操作
(8)java源码是经典学习
入门案例
-
spring官网:spring.io->project->spring framework->learn->spring 5.2.x(GA),GA表示稳定->点击GitHub图标->access to binaries->spring framework Artifats点击该目录下的下载地址,
找到release(发布)->org->spring->复制该地址,下载版本 -
打开idea,创建普通的java工程
-
引入jar包,建lib目录将jar包复制过去,点击project structure->modules->+,导入
目前仅需要核心jar包和commons-logging(日志包)
-
创建普通类,写一个普通方法
-
创建Spring配置文件,在配置文件中创建对象
(1)src目录下,创建xml格式的配置文件
<bean id="xxx" class="com.xxx.xxx.xxx.xxx"> </bean>
-
建立测试类,进行测试
@Test public void test(){ //1.加载配置文件 ApplicationContext context=new ClassPathApplicationContext(beaa1.xml) //2. 获取配置文件创建的对象 context.getBean(user,user.class) //写bean的id,id.claas sout(user); user.add(); }
(1)xml下,bean的创建语句是什么?
(2)加载配置文件的语句是什么?
(3)获取配置文件创建的对象的语句是什么?
-
IOC容器
Inversion of Control
(1) IOC底层原理
-
什么是IOC?
(1)控制反转:把对象的创建和对象之间的调用过程,交给Spring进行管理
(2)使用IOC目的:为了耦合度降低
(3)入门案例就是IOC实现
-
IOC底层原理
(1)xml解析、工厂模式、反射
-
图解
工厂模式的目的:耦合度降低到最低限度
什么是IOC?
(2)IOC接口
-
IOC思想基于IOC容器完成,IOC容器底层本质就是对象工厂
-
Spring提供IOC容器实现的两种方式:(两个接口)
(1)BeanFactory:IOC容器的基本实现,是Spring内部的使用的接口,不提供给开发人员使用
加载配置文件时候不会创建对象,在获取(使用)对象才去创建对象
**(2)ApplicationContext:**BeanFactory接口的子接口,提供更多更强大的功能,提供给开发人员使用
加载配置文件时候创建对象,在获取(使用)对象才去创建对象
ApplicationContext主要实现类
打开类结构的快捷键:Ctrl+H
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5vLyJNMM-1646324959844)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220122170720305.png)]
File…:写盘符路径(全路径)
Class…:写src下的的路径(类路径)
IOC容器底层的本质是什么?
IOC容器实现的两个接口是什么?
(3)IOC操作Bean管理
-
什么是Bean管理?
(1)Spring创建对象
(2)Spring注入属性
- Bean操作有两种方式
(1)xml配置文件
(1)什么是bean管理?
(2)spring对象的创建的语句是什么?
(3)DI的两种注入方式是什么?
(4)set注入的两种方式的语句怎么写?
(5)有参构造怎么写?
(6)注入的内容为null,xml字符,怎么注入?
(7)外部bean怎么注入?
(8)内部bean注入?
(9)级联赋值的两种方法?
(10)xml注入集合属性,如数组、list、map、set
(11)集合中存放对象怎么写?
(12)集合抽取作为公共部分怎么写?
-
Spring创建对象
<bean id="xxx" class="com.xxx.xxx.xxx.xxx"> </bean>
(1)使用bean标签,标签里面添加对应的属性,就可以实现对象创建
(2)常用的bean属性
id:给对象取个别名(唯一标识)
class:类的全路径(src下的属性)
name:类似id,但可以加特殊符号而id可以
(3)创建对象的时候默认使用无参构造
- 基于xml注入属性
(1)DI:依赖注入,就是注入属性
第一种注入方式:set(先创建对象再注入属性)
**(1)**创建类,定义属性和 对应的set方法
(2) 在spring配置文件配置对象的创建,配置属性的注入
普通:
spring:
简化的set注入方法(了解):
使用P,名称空间在配置文件中
(1)添加P名称空间在配置文件中
在标签后加入一个约束xmlns:p = “http…org/…/p”(前面复制前面的xmlns标签)(名称空间)
(2)进行属性注入,在bean标签里面进行操作
第二中注入方式:使用有参构造进行注入
(1)创建类:定义属性,创建有属性的构造方法
(2)在spring配置文件中进行配置,有参构造注入
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IvH92XZG-1646324959849)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220122181719777.png)]![在这里插入图片描述](https://img-blog.csdnimg.cn/9f2e87f5c3e043aa81f0edf81a0977fb.png#pic_center)
> 另一中方法:有参构造索引值进行注入,0表示第一个属性,1表示第二个属性
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8yPBuBBj-1646324959849)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220122181941668.png)]
3. xml注入其他属性
(1)字面量(属性设置固定值)
1. null
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hYr4aNha-1646324959850)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220122184240775.png)]
2. 属性中包含特殊符号
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BnsjDFYf-1646324959851)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220122184501262.png)]
(1)转义<(<),>(>)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OwHpt880-1646324959851)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220122184528203.png)]
> gt 英文全称是 Greater than
> lt 英文全称是 Less than
(2)写到CDATA中(property中的value可以分开写)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DCA8PMJV-1646324959852)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220122184919224.png)]
<![CDATA[内容]]>
> Character Data
4. 注入属性
1. 外部bean
(1)创建两个类service类和dao类
(2)在service中调用dao里面的方法
(3)在配置文件中进行配置
> 普通方式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CUAHkfft-1646324959853)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220122214316534.png)]
> spring方式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CYaP198F-1646324959854)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220122214652059.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R3INs3L4-1646324959854)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220122214928268.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r94M6OfX-1646324959855)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220122215357014.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HpvFu3TV-1646324959855)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220122215515090.png)]
2. 内部bean
(1)一对多关系:部门和员工
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9ZmrXOn1-1646324959856)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220122220057291.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-InVCR2Cv-1646324959856)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220122220144274.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YcfddmIj-1646324959857)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220122220257055.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1LXdNfZ7-1646324959857)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220122220804396.png)]
3. 注入属性-级联赋值(对象中包含对象,给内部对象赋值)
第一种方法:
> 外部bean[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ca6ppjls-1646324959858)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220122222601468.png)]
第二种方法:
> 要点:内部对象要有get方法
>
> [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lk8j32nA-1646324959858)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220122225636401.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6mEOCShU-1646324959861)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220122225720904.png)]
5. xml注入集合属性
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lpsMNI0x-1646324959862)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220122230609367.png)]
(1)数组
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6s1jEaB7-1646324959863)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220122230946945.png)]
(2)list集合
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nt3SCmmb-1646324959864)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220122231033170.png)]
(3)Map集合
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n5tx21mB-1646324959865)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220122231103869.png)]
(4)set集合
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YSU3t8MQ-1646324959866)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220122231132624.png)]
细节:(1)集合中放对象
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rBf9ifDO-1646324959866)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220122232201641.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-783EJT0j-1646324959867)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220122232342408.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oh13MHoX-1646324959867)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220122232613308.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W8Sdq5P1-1646324959868)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220122232648961.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AKUKzbUD-1646324959868)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220122232926684.png)]
(2)集合抽取作为公共部分
1. 在spring配置文件中引入名称空间:util
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fuGAv37o-1646324959869)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220122235634874.png)]
2. 使用util标签完成list集合提取
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xv9RH4uT-1646324959870)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220122235848667.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-clxkIJ0S-1646324959870)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220123000733466.png)]
6. FactoryBean
(1)Spring中有两种bean,一种为普通bean,一种为factorybean
(2)普通bean:在配置文件中定义baan类型就是返回类型
(3)工厂bean:返回类型可以不是定义的类型
做法:(1)创建类,让这个类作为工厂bean, 实现接口factorybean
(2)实现接口里面的方法,在实现的方法中定义返回的bean类型
普通bean:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KSdZgG72-1646324959872)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220124210715552.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uRFR21UU-1646324959873)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220124210811118.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OQ8iNg09-1646324959874)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220124210852208.png)]
factorybean:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U6qT6Ho6-1646324959875)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220124211001420.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yTwjC5UM-1646324959875)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220124211015192.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Kb9nA0dB-1646324959876)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220124211249593.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E5jvVLTu-1646324959876)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220124223236521.png)]
7. bean的作用域
(1)在spring里面,设计创建bean是单实例还是多实例。
(2)在spring里面,默认情况下是单实例
验证:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cUtP7DjB-1646324959877)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220124230607035.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3efr6ChL-1646324959878)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220124230630049.png)]
(3)如何设置单实例还是多实例
1. 在spring配置文件bean标签里有属性(scope)用于设置单实例还是多实例
2. scope属性值:singleton(单)、prototype(多)、request、session
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jXq5vt8e-1646324959878)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220124231016509.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HwimQiNY-1646324959879)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220124231033254.png)]
3. singleton、prototype的区别
(1)单、多
(2)设置为singleton,加载spring配置文件的时候就会创建单实例对象
(3)设置为prototype,不是在加载spring配置文件的时候创建,在调用getBean方法时候创建多实例对象
8. bean的生命周期
(1)对象从创建到销毁的过程
(2)bean生命周期
1. 通过构造器创建bean实例(无参数构造)
2. 为bean的属性设置值和队其他bean的引用(调用set方法)
3. > 把bean实例传递给bean后置处理器的方法
4. 调用bean的初始化的方法(需要进行配置)
5. > 把bean实例传递给bean后置处理器的方法
6. bean可以使用了(对象获取到了)
7. 当容器关闭时候,调用bean的消耗方法(需要进行配置销毁的方法)
(3)演示
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ytyde3sJ-1646324959879)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220124232409767.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LIjXbiYe-1646324959880)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220124232439590.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-baz6bVBS-1646324959880)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220124232529523.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-scgHFcSC-1646324959881)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220124232548128.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9IUUMsCR-1646324959882)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220124232642143.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SkR3EF6o-1646324959883)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220124232739944.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4OhMQQRt-1646324959884)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220124232757479.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zI401Aps-1646324959884)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220124232825603.png)]
加上bean的后置处理器,则一共有7步,添加后置处理器
(1)创建类,实现接口BeanPostProcessor,创建后置处理器
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vLpBxxFP-1646324959885)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220124233813491.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7mco0SDC-1646324959886)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220124233942303.png)]
怎么知道是后置处理器?
因为实现BeanPostProcessor
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SswvcHV7-1646324959887)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220124234141615.png)]
9. 自动装配
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L3JIrnM5-1646324959887)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220124234328860.png)]
->手动装配
(1)根据指定装配规则(属性名称或者属性类型),Spring自动将匹配的属性值进行注入
(2)演示
手动:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6lbHrLHj-1646324959888)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220124234617476.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KQxNnPsK-1646324959888)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220124234658253.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bdhQcBwV-1646324959889)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220124234810833.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2fCijbcq-1646324959889)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220124234922651.png)]
自动装配(将一个类注入到另一个类中):
bean标签属性autowise,配置自动装配
autowise属性常用两个值:
(1)byName
根据属性名称注入,注入值bean的id值和类属性名称一样[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-52kmhdwa-1646324959890)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125000312572.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B9nU9ZuM-1646324959891)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125000155831.png)]
(2)byType(相同类型的type不能定义多个bean)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5aGap1am-1646324959892)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125000404575.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bcLHSEMb-1646324959893)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125000707775.png)]
10. 外部属性文件
(1)直接配置数据库信息->配置德鲁伊连接池->引入德鲁伊连接池依赖Jar包
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IyrAApmP-1646324959894)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125122642931.png)]
(2)引入外部的属性文件->properties格式文件,写数据库信息(key-value)->把外部properties属性文件引入到spring文件中(引入context名称空间)->在spring配置文件中[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TvU1eLNi-1646324959895)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125122919062.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N3U1wfqn-1646324959895)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125123121845.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NYgyKA4G-1646324959896)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125123322922.png)]
> placeholder占位符
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KomqC2yt-1646324959896)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125123602582.png)]
**(2)注解**
1. 什么是注解?
注解是代码特殊标记,格式:@注解名称(属性名称=属性值,属性名称=属性值)
> @Test
2. 注解在什么地方用?
(1)类上面
(2)方法上面
(3)属性上面
3. 使用注解的目的是什么?
为了简化xml配置
4. Spring针对Bean管理中创建对象提供注解
(1)@Component:组件
(2)@Service:业务逻辑层,service层
(3)@Controller:web层
(4)@Repository(仓库):dao层
上面的四个注解的功能是一样的,都可以用来创建bean实例
5. 基于注解方式实现对象创建
(1)引入依赖
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dG1no82A-1646324959897)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125124906640.png)]
(2)开启组件扫描
具体步骤:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DE0HQR6d-1646324959898)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125125150346.png)]
扫描多个包的具体操作:
- 多个包之间,隔开
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I9wHqHqA-1646324959899)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125125532873.png)]
- 扫描包的上层目录
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x1cWWWdL-1646324959899)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125125614007.png)]
(3)创建类,在类上面添加创建对象注释
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ga0ETas1-1646324959900)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125125946990.png)]
注解里面value属性值可以不写,默认值为类名称,将首字母改为小写
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C1RNpT9j-1646324959900)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125130217784.png)]
测试
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jj7efXqJ-1646324959901)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125130427179.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mceeuZsz-1646324959902)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125130440453.png)]
- 开启组件扫描的一些细节问题
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0qAIaLfz-1646324959902)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125131734189.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1oDHvszs-1646324959904)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125131603455.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s4V5U6yq-1646324959905)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125131820870.png)]
- 注解实现属性注入
(1)@Autowired(Wire有链接的意思):根据属性类型进行自动装配
第一步:创建对象,在service和dao类创建对象注解
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N2Dzu8Lw-1646324959906)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125132518852.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XEfxRA98-1646324959907)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125132553259.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4k7xxuAg-1646324959908)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125132841317.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-flDGbZat-1646324959908)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125132906920.png)]
第二步:在service里面注入dao,在service类添加dao类型属性,在属性上面使用注解
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gsCFIcBT-1646324959909)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125133009146.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fLtUdkD4-1646324959909)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125133146049.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-udsAoy6o-1646324959910)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125133356140.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aNe5rczU-1646324959910)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125133404108.png)]
(2)@Qualifier:根据名称进行注入,要和@Autowired一起使用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FHHR7AMm-1646324959911)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125133641892.png)]
(3)@Resource:可根据类型注入,可根据名称注入
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5HfTkKzm-1646324959911)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125162509007.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F380ptIi-1646324959912)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125162611074.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uO37giA8-1646324959912)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125162907847.png)]
不是spring中的而是javax中的
(4)@Value:注入普通类型属性
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1OzDuk4K-1646324959913)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125163042758.png)]
8、完全注解开发
(1)创建配置类,替代xml配置文件,加注解
@Configuration、扫组件描
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9ToRGyGb-1646324959914)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125163553485.png)]
(2)编写测试类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ga5npZ2o-1646324959914)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125163918835.png)]
AOP
AOP的概念
(1)面向切面编程,利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
(2)通俗描述:不通过修改源代码的方式,在主干 功能里面添加新功能
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QFgi6b9F-1646324959916)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125164841700.png)]
AOP底层原理
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xwL7KZ5S-1646324959916)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125165654344.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ayz0UkAM-1646324959917)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125165938235.png)]
(1)AOP的动态代理(JDK)
- 使用JDK动态代理
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t2pzRsV3-1646324959918)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125170228828.png)]
调用newProxyInstan方法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4HuVRksQ-1646324959918)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125170514757.png)]
第一个参数:类加载器
第二个参数:接口,增强方法所在类,这个类实现的接口,支持多个接口
第三个参数:实现这个接口InvocationHandler,创建代理对象,写增强的方法
- 编写 JDK动态代理代码
(1)创建接口,定义方法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V8J1L7DN-1646324959919)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125201525964.png)]
(2)创建接口实现 类,实现方法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IATA969d-1646324959920)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125201803915.png)]
(3)使用Proxy类创建接口代理对象
-
匿名内部类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RGdZRlYQ-1646324959921)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125202356128.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zswL1svk-1646324959921)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220125202910078.png)]
- 创建代理对象代码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KNFmo6u7-1646324959922)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126121432440.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-knh59PCB-1646324959922)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126120313104.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pd24Qads-1646324959924)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126121242124.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ri5JtIqq-1646324959925)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126121308800.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xElHJjiT-1646324959926)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126121346091.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OREbSNrB-1646324959926)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126123112301.png)]
AOP(术语)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ovKNlaXT-1646324959927)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126123743408.png)]
-
连接点
类里面的哪些方法可以被增强,这些方法称为连接点
-
切入点
实际被真正增强的方法就交切入点
-
通知(增强)
(1)实际增强的逻辑部分称为通知(增加)
(2)通知有多种类型
- 前置通知
- 后置通知
- 环绕通知(前后)
- 异常通知
- 最终通知(一定会执行,不管有没有异常)
-
切面
是动作
(1)把通知应用到切入点过程
AOP操作准备
-
Spring框架一般是基于AspectJ实现AOP操作
(1)什么是AspectJ
AspectJ不是Spring组成部分,是独立AOP框架,一般AspectJ和Spring框架一起使用,进行AOP操作
-
基于AspectJ实现AOP操作
(1)基于xml配置文件实现
(2)基于注解方式实现(使用)
-
在工程里面引入AOP相关依赖
-
切入点表达式
(1)切入点表达式作用:知道对哪个类哪个方法进行增强
(2)语法结构:
execution([权限修饰符][返回类型][类全路径][方法名称][参数列表])
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2b0RHFUt-1646324959927)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126125804233.png)]
execution(* com.Book.add(…))
返回类型可以省略
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3jI7zcFP-1646324959928)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126125918300.png)]
execution(* com.Book.*(…))
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J6YMVZmC-1646324959929)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126130051027.png)]
execution(* com.*.*(…))
AOP操作(注解)
- 创建一个被增强类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-malVsHlO-1646324959929)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126130421564.png)]
- 创建增强类,编写增强逻辑
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sLugItPD-1646324959930)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126130620677.png)]
-
进行通知的配置
(1)在spring配置文件中,开启注解扫描
(2)使用注解创建User和UserProxy对象
(3)在增强类上面添加注解@Aspect
(4)在spring配置文件中开启代理生成对象
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h85PKvkg-1646324959930)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126130959567.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ijk9vgXg-1646324959931)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126131012238.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V6ykM72W-1646324959932)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126131032456.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rct64Hzc-1646324959932)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126131043616.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fq8pi6Jw-1646324959933)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126131131593.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bke4MZwP-1646324959934)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126131227933.png)]
-
配置不同类型的通知
(1)在增强类里面,在作为通知方法上面添加通知类型注解,使用切入点表达式配置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p6S49F8s-1646324959934)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126131609072.png)]测试
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZMGNJj0l-1646324959936)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126131810334.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YvJfn4VL-1646324959937)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126131832869.png)]
after(最终通知)和afterreturning的区别:
after是方法结束之后执行,不关有无异常都执行
afterReturnin(后置通知(返回通知 ))g是方法执行完后,返回了返回值之后执行,有异常不执行
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CCQfNld6-1646324959937)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126133034273.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aDARM2P6-1646324959938)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126133126336.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5AlfodSu-1646324959939)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126133149544.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vR7XBlbF-1646324959939)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126133216511.png)]
-
-
相同切入点抽取
类似java中公共类的抽取
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LycehOMm-1646324959940)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126202601270.png)]
- 有多个增强类,对同一个方法进行增强,设置增强类优先级
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LFPTo55a-1646324959940)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126202857090.png)]
(1)在增强类上面添加注解@Order(数字类型值),数字类型值越小优先级越高
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9TSwy8R2-1646324959941)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126203224744.png)]
AspectJ配置文件(了解)
-
创建两个类,增强类和被增强类,创建方法
被增强类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VuGFnBcG-1646324959942)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126203701166.png)]
增强类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ad8COzav-1646324959942)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126203802249.png)]
-
在spring配置文件中创建两个类对象
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yKsUMZSW-1646324959943)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126203913217.png)]
-
在spring配置文件中配置切入点
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dZaeyJoQ-1646324959943)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126204221609.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IuDI0NaL-1646324959944)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126204330057.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0AeYmkrH-1646324959945)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126204342080.png)]
完全注解方式
使用配置类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ojA5rb3T-1646324959945)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126204524588.png)]
JdbcTemplate
JdbcTemplate的概念和准备
- 什么是JdbcTemplate?
Spring框架对JDBC进行封装,使用JdbcTemplate方便实现对数据库操作
-
准备工作
(1)引入jar包
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b2tgpQRA-1646324959946)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126210448035.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y3YXrtwO-1646324959947)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126210556704.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0LbVRiaJ-1646324959947)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126210613398.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qlpWiH3c-1646324959949)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126210632615.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WzV32KfH-1646324959949)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126210747102.png)]
(2)数据库连接池配置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5LwX2enl-1646324959949)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126210859179.png)]
(3)配置jdbcTemplate对象,注入DataSource
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4IEacq0n-1646324959950)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126211213622.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UOaN19GF-1646324959950)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126211426266.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uMiiFytZ-1646324959950)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126211524296.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qWhCLWk4-1646324959951)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126211543816.png)]
(4)创建service类,创建dao类,在dao注入jdbcTemplate对象
service中注入dao,dao中注入jdbcTemplate
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AgKkd1Qp-1646324959951)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126212118614.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-83yqzVqh-1646324959951)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126212145730.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8GveqmiK-1646324959952)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126212201473.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7PaS5lZ7-1646324959952)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126212318013.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KhOcpuZY-1646324959952)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126212418270.png)]
jdbctemplate在配置文件中创建了
添加
- 对应数据库创建实体类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cytdS44y-1646324959953)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126215322738.png)]
-
编写service和dao
(1)在dao进行数据库添加操作.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gamcZ59O-1646324959953)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126215751928.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BZfzeKkd-1646324959954)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126215812512.png)]
(2)调用JdbcTemplate对象里面 update方法实现添加操作[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qNAu1xi2-1646324959955)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126220007424.png)]
- 有两个参数
- 第一个参数:sql语句
- 第二个参数:可变参数,占位符(?)的值
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uxKjIcBj-1646324959956)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126220307383.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FKFA75gB-1646324959957)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126222146336.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-txBL8fni-1646324959958)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126222234655.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l7lAFI1c-1646324959958)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126222537783.png)]
测试类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RXz5kaIe-1646324959959)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126222631672.png)]
修改和删除
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xzg51jrr-1646324959960)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126223242671.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gbix4upI-1646324959960)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126223304278.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3FW34PTL-1646324959961)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126223441849.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DETPP72q-1646324959962)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126223537161.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uKXeeMbC-1646324959962)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126223656496.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ug6K1qvX-1646324959963)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126223747741.png)]
查询
-
查询返回某个值
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F9dI1Fjj-1646324959963)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126224025030.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mU1Wmz2L-1646324959966)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126224149586.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RVrdOwkd-1646324959967)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126224323669.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x58SSfLH-1646324959968)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126224346589.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s192ypsb-1646324959968)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126224449821.png)]
- 第一个参数:sql语句
- 第二个参数:返回类型的class(如:Interger.class)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vXREc65N-1646324959969)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126224651211.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4bAg9DvP-1646324959970)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126224751642.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NjiCLs55-1646324959999)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126224824177.png)]
查询返回对象
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iQ3Oereo-1646324960000)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126231513865.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nc2AQTX0-1646324960001)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126231546272.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NgdRP5Ca-1646324960002)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126231711821.png)]
-
第一个参数:sql语句
-
第二个参数:RowMapper,是接口,返回不同类型数据,使用这个接口实现类完成数据封装
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SseetJjA-1646324960003)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126232011957.png)]
-
第三个参数:sql语句值
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-epTgqfKR-1646324960003)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126232249044.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0YCCsTw1-1646324960005)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126232305810.png)]
返回集合
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a48XasCA-1646324960005)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126232518571.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VfG5ukEr-1646324960006)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126232542893.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x72EMuVo-1646324960007)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126232637316.png)]
- 第一个参数:sql语句
- 第二个参数:RowMapper,是接口,返回不同类型数据,使用这个接口实现类完成数据封装
- 第三个参数:sql语句值
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W3jltNfy-1646324960008)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126232829045.png)]
测试
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gzVj4R8U-1646324960009)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126232933099.png)]
批量操作
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9Fjwfkps-1646324960009)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126233250702.png)]
- 第一个参数:sql语句
- 第二个参数:list集合,添加多条记录数据
-
批量添加
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-opKgXeSb-1646324960014)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126234036174.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4fxdyB6d-1646324960014)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126233957005.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f3oHEk1K-1646324960016)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126234225216.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qTwIymrC-1646324960017)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220126234500518.png)]
-
批量修改
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jiHolFxs-1646324960018)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220127123556534.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eToUBk7p-1646324960018)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220127123622971.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rTsHOqA2-1646324960019)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220127123717518.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XuoHf2U9-1646324960020)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220127123923126.png)]
-
批量删除
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vGioRJ3P-1646324960020)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220127124142956.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BkB05DSu-1646324960021)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220127124157568.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FpXVIm22-1646324960022)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220127124252533.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9NH9n1f7-1646324960022)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220127124356052.png)]
事务管理
-
基本概念
(1)什么是事务?
事务是数据库操作的最基本单元,逻辑上的一组操作,要么都成功,如果有一个失败所有操作都失败,经典场景:银行转账
(2)事务的四个特性
- 原子性(atomicity):不可分割,都成工或都失败
- 一致性(consistency):总量不变(如转钱)
- 隔离性(isolation):操作同一事务,相互之间不会产生影响
- 持久性(durability):提交后,表中数据真正发生变化
-
搭建事务操作环境
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tpcd03Tv-1646324960023)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220127130121105.png)]
-
创建数据库表,添加记录
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ofkxbikX-1646324960024)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220127130300357.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IGwfKvo1-1646324960024)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220127130348211.png)]
-
创建service,搭建dao,完成对象创建和注入关系
(1)service中注入dao,dao中注入jdbcTemplate,jdbcTemplate注入DataSource
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cwMAe4St-1646324960025)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220127131240376.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UWeseAYd-1646324960026)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220127131538236.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SKjBXoJ1-1646324960026)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220127131559557.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HL5ID48t-1646324960027)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220127131657296.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-99oe52y7-1646324960029)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220127131745902.png)]
-
在dao创建两个方法:多钱和少钱的方法,在service创建方法(转账的方法)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hzXFb1Y9-1646324960030)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220127132010341.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E8jM7LjF-1646324960031)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220127132207963.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tPlNkPpB-1646324960032)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220127132228916.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-isBLdP5v-1646324960032)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220127132411515.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jSUAeQiv-1646324960033)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220127132538166.png)]
- 上面代码,执行过程中出现了异常,就会产生问题
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fs1ZsFsd-1646324960035)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220127132835619.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wLPuUmGK-1646324960036)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220127132904228.png)]
(1)上面问题如何解决呢?
事务
(2)开启事务->进行业务操作(写在try中)->没有异常,提交事务->出现异常,事务回滚(写在catch中)
普通:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HUfc4HXK-1646324960036)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220127133344136.png)]
-
Spring管理事务
(1)一般加到Service层,Service层一般是逻辑上的一组操作
(2)在Spring中进行事务管理操作有两种方式
- 编程式事务管理(一般不用,造成臃肿)
- 声明式事务管理
- 基于注解(常用)
- 基于xml
(3)声明式事务管理,底层使用AOP
面试:在什么地方使用过AOP?
(4)Spring事务管理API
-
提供 一个接口,代表事务管理器,这个接口针对不同的框架提供不同的实现类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O2pWmH5F-1646324960037)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220127134331702.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3oTKdFDR-1646324960038)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220127134705594.png)]
步骤:
-
在spring配置文件配置事务管理器
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NYPuTGA9-1646324960038)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220127140405900.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z4VLkpfr-1646324960044)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220127140428920.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7sbJVqYj-1646324960045)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220127140457852.png)]
-
在配置文件中开启事务注解
(1)引入名称空间tx(transaction)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9oCO1KAg-1646324960045)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220127140906273.png)]
(2)开启事务注解
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VbEtnJ26-1646324960046)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220127141001979.png)]
-
在service类上面(或者service类方法上面)添加注解
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FcaHUKjp-1646324960046)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220127141141721.png)]
(也可以加到 方法上面)
添加到类,就是所有方法都添加事务,写方法就只是这个方法上有事务
-
-
声明式事务管理参数配置
(1)在service类上面添加注解@Transactional,在这个注解里面可以配置事务相关参数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uuihPKsv-1646324960047)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220127141840218.png)]
-
propagation:事务传播行为
多事务方法之间进行调用,这个过程中事务是如何进行管理的
-
事务方法:对数据库表数据进行变化的操作(增删改、查不算)
-
传播属性
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lB1ne1Oz-1646324960047)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220127142759553.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0pkeJb9q-1646324960048)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220127143116638.png)]
不配置,默认为:required
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xqU6GyDf-1646324960048)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220127143245428.png)]
-
-
isolation:事务隔离级别
(1)事务有特性成为隔离性,多事务操作之间不会产生英雄,不考虑隔离性产生很多问题。
(2)有三个读问题:脏读、不可重复读、幻(虚)读
-
脏读(!!严重):一个未提交的事务读取到了另一个未提交事务的数据
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bBo02iRx-1646324960049)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220127144012256.png)]
-
不可重复读:一个未提交的事务读取到另一个提交事务修改数据
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cXE1Gd6X-1646324960049)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220127144503570.png)]
-
虚读:不可重复读:一个未提交的事务读取到另一个提交事务添加数据
(3)解决方法,设置事务隔离级别,解决读问题
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VB7fuAbj-1646324960050)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220127144906596.png)]
read uncommitted
read committed
repeatable read(默认)
serializable
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8XeEl7By-1646324960050)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220127145110484.png)]
-
-
timeout:超时时间
(1)事务需要在一定时间内进行提交,如果不进行提交将会进行回滚
(2)默认值为-1,表示永不超时
(3)以秒为单位进行计算
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-szPS1VpH-1646324960050)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220128001352144.png)]
-
readOnly:是否只读
(1)读:查询操作,写:添加、修改、删除操作
(2)readOnly默认值为false,可以进行查询,添加、修改操作
(3)可以认为将其设为true,设置为true后,只能进行查询操作
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hVdDURDj-1646324960051)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220128001709025.png)]
-
rollbackFor:回滚
设置出现那些异常进行回滚
-
norollbackFor:不回滚
设置出现那些异常不进行回滚
写法:属性=异常的类
xml声明式事务管理
-
在spring配置文件中,配置事务管理器
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eSDcbDZA-1646324960052)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220128002355815.png)]
-
配置通知(事务)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VsJjittJ-1646324960052)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220128002658032.png)]
-
配置切入点(被增强的方法)和切面
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-53QvBHrY-1646324960053)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220128003038607.png)]
-
测试
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ob06z2Zr-1646324960054)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220128003305012.png)]
完全注解开发
- 创建配置类
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RYhNXEYy-1646324960055)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220128003909847.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LWp60pez-1646324960055)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220128003935754.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RiqcK1vi-1646324960056)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220128004140247.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Aa75YO4i-1646324960057)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220128004148639.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ai3WxsBM-1646324960057)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220128004256154.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7Mr0PJRI-1646324960058)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220128004233171.png)]
测试:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wQOPDZCi-1646324960059)(C:\Users\Administrator\Desktop\java学习\Spring5.assets\image-20220128004403249.png)]
Spring 5新特性
read uncommitted
read committed
repeatable read(默认)
serializable
[外链图片转存中...(img-8XeEl7By-1646324960050)]
* timeout:超时时间
(1)事务需要在一定时间内进行提交,如果不进行提交将会进行回滚
(2)默认值为-1,表示永不超时
(3)以秒为单位进行计算
[外链图片转存中...(img-szPS1VpH-1646324960050)]
* readOnly:是否只读
(1)读:查询操作,写:添加、修改、删除操作
(2)readOnly默认值为false,可以进行查询,添加、修改操作
(3)可以认为将其设为true,设置为true后,只能进行查询操作
[外链图片转存中...(img-hVdDURDj-1646324960051)]
* rollbackFor:回滚
设置出现那些异常进行回滚
* norollbackFor:不回滚
设置出现那些异常不进行回滚
写法:属性=异常的类
### xml声明式事务管理
1. 在spring配置文件中,配置事务管理器
[外链图片转存中...(img-eSDcbDZA-1646324960052)]
2. 配置通知(事务)
[外链图片转存中...(img-VsJjittJ-1646324960052)]
3. 配置切入点(被增强的方法)和切面
[外链图片转存中...(img-53QvBHrY-1646324960053)]
4. 测试
[外链图片转存中...(img-ob06z2Zr-1646324960054)]
### 完全注解开发
1. 创建配置类
[外链图片转存中…(img-RYhNXEYy-1646324960055)]
[外链图片转存中…(img-LWp60pez-1646324960055)]
[外链图片转存中…(img-RiqcK1vi-1646324960056)]
[外链图片转存中…(img-Aa75YO4i-1646324960057)]
[外链图片转存中…(img-Ai3WxsBM-1646324960057)]
[外链图片转存中…(img-7Mr0PJRI-1646324960058)]
测试:
[外链图片转存中…(img-wQOPDZCi-1646324960059)]