学习笔记13——Spring整合Mybatis、junit、AOP、事务
学习笔记系列开头惯例发布一些寻亲消息
链接:https://baobeihuijia.com/bbhj/
Mybatis - Spring(使用第三方包new一个对象bean)
-
原始的Mybatis与数据库交互【通过sqlmapconfig来配置和连接】
- 初始化SqlSessionFactory
- 获得连接
- 获取数据层接口
- 需要一个类与数据中的数据进行匹配
- 用注解形式进行增删改查
- 关闭连接
-
使用第三方包Spring-Mybatis,将mybatis改为spring的模式,不要再类内new SqlSessionFactory,而是把mybatis当作容器的对象可以用
- 引入mybatis-spring第三方包来帮助整合,在注解方法中,如果要用第三方包则需要新建一个config然后在这个类中手动new一个bean
- 通过Bean生成一个SqlSessionFactoryBean对象(加入扫描类型的包),与数据源建立连接
- 生成MapperScannerConfigurer对象,获取数据层
- 因此就可以通过注解的方式生成对象调用数据库了
public class MybatisConfig {//定义bean,SqlSessionFactoryBean,用于产生SqlSessionFactory对象@Beanpublic SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();ssfb.setTypeAliasesPackage("com.itheima.domain");ssfb.setDataSource(dataSource);return ssfb;}//定义bean,返回MapperScannerConfigurer对象@Beanpublic MapperScannerConfigurer mapperScannerConfigurer(){MapperScannerConfigurer msc = new MapperScannerConfigurer();msc.setBasePackage("com.itheima.dao");return msc;} }
Junit-Spring(添加注解)
-
Junit与spring的整合(在测试类上添加注解,然后在类内直接@Autowired就可以将容器的对象引入测试)
//设置类运行器 @RunWith(SpringJUnit4ClassRunner.class) //设置Spring环境对应的配置类 @ContextConfiguration(classes = SpringConfig.class)
AOP-Spring
新建一个class作为component,并且标记该类不是普通的类,是AOP类,打开config的AOP扫描
一般用在service拦截判断,拦截一批处理一批,然后将正确数据传入数据层
-
AOP:面向切面编程,通过调用第三方包AOP,不需要new对象,只需要新建一个component类,并且通过@EnableAspectJAutoProxy和@Aspect保证config知道有AOP并且知道哪个是AOP,从而调度对象代码执行时,切入执行通知
-
在不惊动原始设计的基础上为其增强功能
- 连接点:运行过程的任意方法
- 切入点:多个方法
- 通知:在切入点指定的操作,即共性功能
- 切面:通知与切入点的绑定
-
在spring-config中添加 @EnableAspectJAutoProxy@Component //设置当前类为切面类类 @Aspect public class MyAdvice {//设置切入点,要求配置在方法上方@Pointcut("execution(void com.itheima.dao.BookDao.update())")private void pt(){}//设置在切入点pt()的前面运行当前操作(前置通知)// @Before("pt()")public void method(){System.out.println(System.currentTimeMillis());} }
-
-
AOP工作流程
- spring容器启动
- 容器开启AOP检测
- 扫描component的时候扫描Aspect
- 读取所有的绑定通知的切入点
- 匹配成功:创建原始对象(被代理的原始对象称为目标对象)的代理对象bean进入容器
- 匹配失败:自定义对象以及引入的对象(如mybatis)bean加入到容器
-
AOP切入点描述表达式
execution(返回值 方法路径 (参数)) // 采用通配符来为一批方法设置切入点// 技巧 切入点一般描述到接口 返回值:对于增删改方法用精准类型加速匹配,对于查询类使用*通配快速匹配
-
AOP通知类型
-
前置通知Before
-
后置通知After
-
环绕Around【ProceedingJoinPoint pjp】
// 拦截后需要return // 要抛出异常,不然就相当于执行原始代码出现问题,但是在这里将问题吃掉了@Around("pt2()")public Object aroundSelect(ProceedingJoinPoint pjp) throws Throwable {System.out.println("around before advice ...");//表示对原始操作的调用Integer ret = (Integer) pjp.proceed();System.out.println("around after advice ...");return ret;}
-
AfterReturning
-
AfterThrow
-
-
AOP通知拿参数
-
都可以拿到参数,可被修改
JoinPoint jp Object[] args = jp.getArgs(); System.out.println(Arrays.toString(args));public Object around(ProceedingJoinPoint pjp) {Object[] args = pjp.getArgs();System.out.println(Arrays.toString(args));args[0] = 666;Object ret = null;try {ret = pjp.proceed(args);} catch (Throwable t) {t.printStackTrace();}return ret;}
-
返回值
// 接返回值@AfterReturning(value = "pt()",returning = "ret")public void afterReturning(JoinPoint jp,String ret) {System.out.println("afterReturning advice ..."+ret);}// 接返回值@Around("pt2()")public Object aroundSelect(ProceedingJoinPoint pjp) throws Throwable {System.out.println("around before advice ...");//表示对原始操作的调用Integer ret = (Integer) pjp.proceed();System.out.println("around after advice ...");return ret;}
-
异常
@Transactional// 接异常@AfterThrowing(value = "pt()",throwing = "t")public void afterThrowing(Throwable t) {System.out.println("afterThrowing advice ..."+t); }// 接异常@Around("pt2()")public Object aroundSelect(ProceedingJoinPoint pjp) throws Throwable {System.out.println("around before advice ...");//表示对原始操作的调用Integer ret = (Integer) pjp.proceed();System.out.println("around after advice ...");return ret;}
-
-
事务
【spring在业务层开了一个事务,保证一系列数据操作同成功同失败,用的是mysql的事务原理】
// 在接口上添加@Transactional// 定义一个事务管理器@Beanpublic PlatformTransactionManager transactionManager(DataSource dataSource){DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();//第三方需要对象的时候要通过参数transactionManager.setDataSource(dataSource);return transactionManager;}// 告诉spring要检测注解事务 @EnableTransactionManagement
-
Spring的事务原理:通过使用共同的datasource来开启mysql事务
- 事务管理员:发起事务方
- 事务协调员:加入事务方
-
有些异常默认不参与回滚:需要@Transactional的时候手动添加
-
事务传播行为有七种:REQUIRES_NEW是让该事务协调员不加入到事务管理员,而是自己开一个事务,失败了不会跟着回滚
@Transactional(propagation = Propagation.REQUIRES_NEW)
务方
[外链图片转存中…(img-OBMznC6o-1703559380919)]
-
有些异常默认不参与回滚:需要@Transactional的时候手动添加
-
事务传播行为有七种:REQUIRES_NEW是让该事务协调员不加入到事务管理员,而是自己开一个事务,失败了不会跟着回滚
@Transactional(propagation = Propagation.REQUIRES_NEW)
相关文章:
学习笔记13——Spring整合Mybatis、junit、AOP、事务
学习笔记系列开头惯例发布一些寻亲消息 链接:https://baobeihuijia.com/bbhj/ Mybatis - Spring(使用第三方包new一个对象bean) 原始的Mybatis与数据库交互【通过sqlmapconfig来配置和连接】 初始化SqlSessionFactory获得连接获取数据层接口…...
【12月比赛合集】4场可报名的「创新应用」、「数据分析」和「程序设计」大奖赛,任君挑选!
CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…)比赛。本账号会推送最新的比赛消息,欢迎关注! 以下信息仅供参考,以比赛官网为准 目录 数据分析赛(1场比赛)程序设计赛&#…...
Cisco模拟器-企业网络部署
某企业园区网有:2个分厂(分别是:零件分厂、总装分厂)1个总厂网络中心 1个总厂会议室; (1)每个分厂有自己的路由器,均各有:1个楼宇分厂网络中心 每个楼宇均包含&#x…...
WPF+Halcon 培训项目实战(12):WPF导出匹配模板
文章目录 前言相关链接项目专栏运行环境匹配图片WPF导出匹配模板如何了解Halcon和C#代码的对应关系逻辑分析:添加截取ROI功能基类矩形圆形 生成导出模板运行结果:可能的报错你的文件路径不存在你选择的区域的内容有效信息过少 前言 为了更好地去学习WPF…...
uniapp中uview组件库的丰富Upload 上传上午用法
目录 基础用法 #上传视频 #文件预览 #隐藏上传按钮 #限制上传数量 #自定义上传样式 API #Props #Methods #Slot #Events 基础用法 可以通过设置fileList参数(数组,元素为对象),显示预置的图片。其中元素的url属性为图片路径 <template>…...
Unity关于动画混合树(Blend Tree)的使用
在动画与动画的切换过程中,常因为两个动画之间的差距过大,而显得动画的切换很不自然。 这时候就需要动画混合树Blend Tree这个功能。使用混合树可以将多个动画混合在一起,例如在处理角色的移动中,走动画与跑动画切换的时候&#x…...
怎么下载landsat 8影像并在ArcGIS Pro中进行波段组合
Landsat 8(前身为Landsat数据连续性任务,或 LDCM)于2013年2月11日由 Atlas-V火箭从加利福尼亚州范登堡空军基地发射升空,这里为大家介绍一下该数据的下载的方法,希望能对你有所帮助。 注册账号 如果之前已经注册过的…...
编程新手IDE
身为一个前端开发者,我深知一个好的开发环境对于编程体验的重要性。对于新手来说,选择一个合适的IDE(集成开发环境)更是至关重要。一个好的IDE可以提高编程效率,减少错误,让新手更专注于学习编程本身。 今…...
如何将一个JSON字符串解析为JavaScript对象或值
JSON.parse(JSON.stringify(data)) 将后端传入的JSON数据data放入该方法的参数中,返回的结果就是JavaScript对象 比如将后端传入的对象key作为对象,而不是字符串双引号格式 {"path": "/home","name": "home",…...
idea配置docker推送本地镜像到远程私有仓库
目录 1,搭建远程Docker 私有仓库 Docker registry 2,Windows10/11系统上安装Docker Desktop 3,idea 配置远程私有仓库地址 4,idea 配置Docker 5,idea在本地构建镜像 6,推送本地Docker镜像到远程 Dock…...
Spring Boot学习随笔- 集成MyBatis-Plus(二)条件查询QueryWrapper、聚合函数的使用、Lambda条件查询
学习视频:【编程不良人】Mybatis-Plus整合SpringBoot实战教程,提高的你开发效率,后端人员必备! 查询方法详解 普通查询 // 根据主键id去查询单个结果的。 Test public void selectById() {User user userMapper.selectById(1739970502337392641L);System.out.print…...
十二、K8S之污点和容忍
污点和容忍 一、概念 k8s 集群中可能管理着非常庞大的服务器,这些服务器可能是各种各样不同类型的,比如机房、地理位置、配置等,有些是计算型节点,有些是存储型节点,此时我们希望能更好的将 pod 调度到与之需求更匹配…...
llvm后端之指令选择源码分析
llvm后端之指令选择源码分析 引言1 主要流程1.1 参数降级1.2 构建DAG1.3 类型合法化1.4 向量合法化1.5 DAG合法化1.6 DAG合并 2 目标实现2.1 TargetLowering2.2 SelectionDAGISel 引言 llvm后端指令选择主要是class SelectionDAGISel的子类实现。整个过程将llvm IR转为有向无环…...
【消息中间件】Rabbitmq消息可靠性、持久化机制、各种消费
原文作者:我辈李想 版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。 文章目录 前言一、常见用法1.消息可靠性2.持久化机制3.消息积压批量消费:增加 prefetch 的数量,提高单次连接的消息数并发消费:…...
aws-sdk-cpp通过bazel构建的S3_client轮子
感觉时间过得很快,又是很久没有更新了 哎,主要原因还是很久都没有学什么东西了,进入社会后不知不觉间倦怠了许多 没什么办法,上班了之后做的很多东西都是调用api,越来越像一个工具人了,虽然说本身也大差不…...
关于WPF MVVM 的详细使用过程以及注意的问题
WPF MVVM 是一种常用的设计模式,在 WPF 应用程序中使用它可以更好地分离界面逻辑和业务逻辑,并且更容易进行单元测试和重构。下面是深入理解 WPF MVVM 的详细使用过程以及注意的问题。 一、MVVM 的基本概念 MVVM 是 Model-View-ViewModel 的缩写&#…...
计算机视觉 全教程目录
1、OpenCV 图像处理框架 实战系列 总目录 OpenCV 图像处理框架 实战系列 总目录 2、现代卷积网络实战系列 总目录 现代卷积网络实战系列 总目录 3、YOLO 物体检测 系列教程 总目录 YOLO 物体检测 系列教程 总目录 4、图像分割实战-系列教程 总目录 图像分割实战-系列教程 总目录…...
油猴脚本开发,之如何添加html和css
简介 油猴是一个脚本管理器,让我们能够方便的使用js脚本,以实现对页面内容的修改、功能增强或其他定制化操作。 常见脚本管理器 Tampermonkey 应该是各位见得最多的也是最知名的,好用又稳定,多浏览器支持Greasemonkey 用户脚本始祖&#x…...
【MATLAB】BiGRU神经网络时序预测算法
有意向获取代码,请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 BiGRU神经网络时序预测算法是一种基于双向门控循环单元(GRU)的多变量时间序列预测方法。该方法结合了双向模型和门控机制,旨在有效地捕捉时间序列数据中…...
57.0/初识 PhotoShopCS4(详细版)
目录 57.1 PhotoShop 概要 57.2.1 像素和分辨率 57.2.2 色彩模式 57.2.3 位图和矢量图 57.3 PhotoShop 基本操作 57.3.1 PhotoShop 界面的认识 57.3.2 PhotoShop 基本界面工具 57.3.3 移动选择工具(V) 57.3.4 选框工具(M)编辑 编辑57.3.5 套索工具(L) 57.3…...
[C#]opencvsharp进行图像拼接普通拼接stitch算法拼接
介绍: opencvsharp进行图像拼一般有2种方式:一种是传统方法将2个图片上下或者左右拼接,还有一个方法就是融合拼接,stitch拼接就是一种非常好的算法。opencv里面已经有stitch拼接算法因此我们很容易进行拼接。 效果: …...
《妙趣横生的算法》(C语言实现)-第10章算法设计与数据结构面试题精粹
【10-1】输入一个字符串并将它输出,以ctrlz组合键表示输入完毕,要求将输入的字符串中多于1个的连续空格符合并为1个。 //10-1 2023年12月30日17点11分-17点18分 # include <stdio.h> int main() {char c;c getchar();//scanf("%c", &a…...
(JAVA)-(网络编程)-初始网络编程
网络编程就是在通信协议下,不同的计算机上运行的程序,进行的数据传输。 讲的通俗一点,就是以前我们写的代码是单机版的,网络编程就是联机版的。 应用场景:即时通信,网游对战,金融证券…...
Observer观察者模式(组件协作)
观察者模式(组件协作) 链接:观察者模式实例代码 解析 目的 在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系” ——一个对象(目标对象)的状态发生改变,所有的依赖对象࿰…...
数据挖掘 聚类度量
格式化之前的代码: import numpy as np#计算 import pandas as pd#处理结构化表格 import matplotlib.pyplot as plt#绘制图表和可视化数据的函数,通常与numpy和pandas一起使用。 from sklearn import metrics#聚类算法的评估指标。 from sklearn.clust…...
[Angular] 笔记 24:ngContainer vs. ngTemplate vs. ngContent
请说明 Angular 中 ngContainer, ngTemplate 和 ngContent 这三者之间的区别。 chatgpt 回答: 这三个在 Angular 中的概念是关于处理和组织视图的。 1. ngContainer: ngContainer 是一个虚拟的 HTML 容器,它本身不会在最终渲染…...
❀My排序算法学习之插入排序❀
目录 插入排序(Insertion Sort):) 一、定义 二、基本思想 三、示例 时间复杂度 空间复杂度 bash C++ 四、稳定性分析...
【算法题】30. 串联所有单词的子串
题目 给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。 s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。 例如,如果 words ["ab","cd","ef"], 那么 "…...
SAP-FI模块 处理自动生成会计凭证增强
ENHANCEMENT 2 ZEHENC_SAPMF05A. "active version * FI 20221215:固定资产业务过渡科目摘要增强功能 WAIT UP TO 1 SECONDS.READ TABLE xbseg WITH KEY hkont 1601990001. IF sy-subrc 0.DATA: lt_bkdf TYPE TABLE OF bkdf,lt_bkpf TYPE TABLE OF bkpf,…...
Shell脚本-bin/bash: 解释器错误: 没有那个文件或目录-完整路径执行-“/”引发的脑裂
引起该不适的一种可能以及解决方案,网上较多,比如: 但按以上方式操作,并经过查看,发现仍然未能解决问题。 因为两种方式执行,有一种能成功,有一种不能,刚开始未怀疑是文件问题&…...
wordpress分页出现404/沈阳网页建站模板
-Xmx1024m -enableassertions -server -XX:MaxPermSize1024m 增大内存。...
做婚纱摄影网站多少钱/站长查询工具
首先sass和less都是css的预编译处理语言,他们引入了mixins,参数,嵌套规则,运算,颜色,名字空间,作用域,JavaScript赋值等 加快了css开发效率,当然这两者都可以配合gulp和grunt等前端构…...
如何让搜索引擎快速收录网站/近期的时事热点或新闻事件
硬件区分 内存 内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。内存(Memory)也被称为内存储器,其作用是用于暂时存放CPU中的运算数据,以…...
做一些好玩的个人网站/百度竞价渠道代理商
转载地址:http://blog.itpub.net/28950170/viewspace-763139/第一步:查看表空间的名字及文件所在位置: select tablespace_name, file_id, file_name, round(bytes/(1024*1024),0) total_space from dba_data_files order by tablespace_name…...
做五金出口在哪个网站好点/个人免费域名注册网站
自学编程,看书还是视频? 01、书,有什么好处呢? 前提条件先说一下,烂书除外。 第一,书籍比较全面,系统化,可以针对一个技术点、一门语言,循序渐进,深度挖掘…...
网站建设准备工作/网站优化关键词公司
原 Oracle 10g OCP 042 题库 1-30 题 共168题https://blog.csdn.net/tianlesoftware/article/details/5767606版权声明: https://blog.csdn.net/tianlesoftware/article/details/5767606 声明:对于答案的相关的说明,是个人对Oracle的理解。 1…...