干翻Mybatis源码系列之第十篇:Mybatis Plugins基本概念

news2024/11/25 18:31:44

给自己的每日一句

不从恶人的计谋,不站罪人的道路,不坐亵慢人的座位,惟喜爱耶和华的律法,昼夜思想,这人便为有福!他要像一棵树栽在溪水旁,按时候结果子,叶子也不枯干。凡他所做的尽都顺利

本文内容整理自《孙哥说Mybatis系列视频课程》,老师实力十分雄厚,B站搜孙帅可以找到本人

前言

插件不属于Mybatis源码的体系,属于Mybatis应用的体系,这就是Mybatis的拦截器,也称为Mybatis plugins
注意需要与Mybatis Plug的深度封装进行区分。

Mybatis Plugins拦截器的作用

作为Mybatis来讲,对于整个数据库访问和操作进行深度的封装。
1:应用开发更加的快速
2:相对来讲,灵活性要比JDBC差一点。
所有的封装,都是为了少编码,代码规范,可以快速开发。但是因为封装的很厉害,进行一些定制操作的时候,基于封装进行操作的时候,基于Mybatis如果不理解到位的话,那么就不太好搞了

Mybatis Plugins就是可以让我们深度的去定制Mybatis的开发。

一:获取Mybatis开发过程中的SQL语句?

一些方案:
这里指的是在我们编程过程中,通过我们的代码获取我们的SQL语句。
1:日志这个方案就不太行了,因为日志必须输出到控制台。
2:IO读文件去拿文件中的SQL。但是这样是没有参数的。
3:使用MappedStatement对象当中对SQL封装的对象(BoundSQL)这样也不能动态获取当前要执行的SQL

JDBC当中是没有这个问题的,因为JDBC在执行我们对应的SQL过程当中,我们是直接把SQL暴露在我们代码当中的。针对于现在的需求来讲,Mybatis现有的体系就无法解决了,这样就遇到了Mybatis Plugins来解决了。

二:Mybatis Plugins拦截器的作用

servlet当中当中的filter是过滤器 ,但是他也是一种拦截器。客户端发请求到达Servlet之前和Servlet处理请求之后,都进行一个拦截处理的操作,这就是拦截器的概念。

在这里插入图片描述
Mybatis中的拦截器和filter的作用是非常相似的,只不过这个拦截器拦截的不是servlet,而是Dao当中开发的各种各样的方法。

UserDao userDao = sqlSession.getMapper(UserDao.class);
userDao.save();

拦截器就是我们真正执行userDao.save()方法前,进行拦截然后处理一些功能,处理完毕之后再执行目标save()方法然后将结果返回给客户端(调用者)。
在这里插入图片描述
拦截器就是拦截用户对Dao中方法的调用,假如一些通用的功能,这就是拦截器的一个核心的作用。如果后续还有一个其他的方法,那么这个拦截器会不会起作用呢?这是一定的,拦截器一定会拦截所有Dao的方法,从这个体系来看,如果我们Spring完的比较好的话,这已经等同于Spring当中的AOP编程了。

三:Mybatis Plugins拦截器的作用 细致版

我们刚才说到,拦截器的作用是拦截Mybatis当中Dao当中的方法的,但是这样的说法是不太准确的。User.save,update,delete,他们的底层无用例外都是sqlSession.select,update,delete,insert也就是sqlSession当中提供的方法。拦截这些Dao的方法,都变成了拦截SqlSession当中的方法,而SQLSession当中的方法,又是由Executor、StatementHandler、ParameterHandler、ResultSetHandler,这些组件帮忙做的,所以所谓的拦截器核心拦截的是这些组件。

我们在往下分,拦截拦截的不是组件对象,一定是对象中的方法。拦截器真正拦截的目标是上边这些组件对象当中的方法。

在这里插入图片描述

原则上这里边的任何一个方法都可以被拦截器拦截到。
但是实际上作为拦截器,这里边都可以被拦截,但是有些是常用的,有些是不常用的,我们实际开发过程中,常用如下:
在这里插入图片描述
我们知道,真正负责数据库操作的是StatementHandler就是Exexutor也得交给StatementHandler来进行数据库操作。
所以,我们认为StatementHandler当中的方法是最常用的,因为:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/647750.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Oracle中的行列互转———pivot、unpivot函数用法

一、需求说明 项目开发过程中涉及到oracle数据库的数据操作;但是需要将数据进行列的互转,通过查阅资料可知在oracle中有三种方式可以实现行列互转: ①使用decode 函数; ②使用case when 函数; ③使用pivot函数&…

Linux之设置主机名

目录 Linux之设置主机名 查看主机名 语法格式 案例 修改主机名 语法格式 案例 --- 修改静态主机名为joker 配置静态解析 为Linux主机指派域名解析 Linux之设置主机名 查看主机名 语法格式 hostnamectl [status] [--static|--transient|--pretty] 解析: s…

极致呈现系列之:Echarts地图的浩瀚视野(一)

目录 Echarts中的地图组件地图组件初体验下载地图数据准备Echarts的基本结构导入地图数据并注册展示地图数据结合visualMap展示地图数据 Echarts中的地图组件 Echarts中的地图组件是一种用于展示地理数据的可视化组件。它可以显示全国、各省市和各城市的地图,并支持…

整形在内存中的存储-原码补码反码的理解与应用

目录 一、概论 1.1 C语言中基本的数据类型 1.2 类型的基本归类 二、整形在内存中的存储 2.1 原码、反码、补码 2.2 存储补码和大小端存储 三、计算各基本数据类型的范围计算原理 3.1 有符号类型的整形范围 3.2 无符号类型的整形范围 3.3 例题 一、概论 C语言提供了非常…

【Java基础学习打卡07】Java语言概述

目录 引言一、Java语言1.Java语言简介2.Java语言优势3.Java能做什么? 二、Java之父三、Java简史1.Java版本时间线2.Java发展重要节点 总结 引言 一、Java语言 1.Java语言简介 Java语言是一种以面向对象为基础的高级编程语言。吸收了C语言的各种优点,又…

【IMX6ULL驱动开发学习】06.APP与驱动程序传输数据+自动创建设备节点(hello驱动)

一、APP与驱动之间传输数据 /*驱动从APP获取数据*/ unsigned long copy_from_user(void *to, const void *from, unsigned long n)/*驱动传输数据到APP*/ unsigned long copy_to_user(void *to, const void *from, unsigned long n)二、使用copy_to_user、copy_from_user在AP…

32908字长文理解Large CV Model:Segment Anything

作者:猛码Memmat 目录 Abstract1. IntroductionTaskModelData engineDatasetResponsible AIExperimentsRelease 2. Segment Anything TaskTaskPre-trainingZero-shot transferRelated tasksDiscussion 3. Segment Anything ModelImage encoderPrompt encoderMask de…

十个实用MySQL函数

函数 0. 显示当前时间 命令:。 作用: 显示当前时间。 应用场景: 创建时间,修改时间等默认值。 例子: 1. 字符长度 命令:。 作用: 显示指定字符长度。 应用场景: 查看字符长度时。 例子: 2. 日期格式化 命令…

【群智能算法改进】一种改进的白鲸优化算法 改进白鲸优化算法 改进后的EBWO[1]算法【Matlab代码#40】

文章目录 【获取资源请见文章第5节:资源获取】1. 原始BWO算法2. 改进的白鲸优化算法EBWO2.1 Logistic映射2.2 透镜成像折射方向学习 3. 部分代码展示4. 仿真结果展示5. 资源获取 【获取资源请见文章第5节:资源获取】 1. 原始BWO算法 白鲸优化算法 (BWO&…

LeetCode —— 206. 反转链表

LeetCode —— 206. 反转链表 一、题目描述: 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2: 输入:head …

【Shiro】第二章 Shiro概述

目录 1、Shiro简介 2、核心组件 1、Shiro简介 【1】什么是Shiro? Shiro是apache旗下一个开源框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权限授权、加密、会话管理等功能,组成了一个通用的安全认证框…

华为OD机试真题 JavaScript 实现【租车骑绿道】【2023Q1 100分】

一、题目描述 部门组织绿岛骑行团建活动,租用公共双人自行车骑行,每辆自行车最多坐两人、最大载重 M。 给出部门每个人的体重,请问最多需要租用多少双人自行车。 二、输入描述 第一行两个数字 m、n,自行车限重 m,代…

管理类联考——逻辑——技巧篇——论说文模块

正论模块 一直为社会、企业所重视。正是因为___让我们在应对挑战中超越自我,形成了一种保持可持续发展的能力与定力,涵养了自强不息、卧薪尝胆的品质,弥补了心智和能力的短板。古今中外这样的事例比比皆是/正如__所言“__”(事实证据或引典)…

Mybatis学习之插件

Mybatis学习之插件 Plugins Mybatis中的插件虽然名称叫插件,但实质上是通过动态代理实现的。和我们平时讲的插件概念不一样,但是本质上都是给外部提供接口进行扩展。 MyBatis 允许我们在映射语句执行过程中的某一点进行拦截调用。MyBatis允许我们使用…

【C/C++】引用()的概念和用法

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

推荐几款可以大幅提高开发效率的vscode插件

1、Vue 2 Snippets 这是一款基于vue2的代码片段提示插件&#xff0c;特别好用&#xff0c;可以有效的提高我们的编码速度。 他的能力非常强大&#xff0c;具体还需要我们去看他的文档文档地址 &#xff0c;解锁更多能力。 2、Path Autocomplete 这是一款路劲提示插件 vscod…

计算机网络实验第一课:HTTP和DNS

实验准备 1.先安装好wireshark 2.开启抓包&#xff0c;然后用过滤器选中http。 3.输入http://gaia.cs.umass.edu 网址&#xff0c;摁下回车键。&#xff08;这里我做实验的时候出了点意外&#xff0c;我一开始开着梯子&#xff0c;然后一直都是通过代理访问的网页&#xff…

Spring Security Oauth2.1 最新版 1.1.0 整合 (基于 springboot 3.1.0)gateway 完成授权认证

目录 背景 版本 Spring Boot 3.1 Spring Authorization Server 1.1.0官方文档 基础 spring security OAuth2.0 模块构成 授权方式 集成过程 官方demo 代码集成 依赖 授权服务AuthorizationServerConfig配置 重要组件 测试 查看授权服务配置 访问授权服务 授…

简单实用的快递查询工具,支持批量查询

大家如果遇到快递一直没到的情况&#xff0c;是不是会很心急呢&#xff1f;这时候就要去查询一下快递具体的运输轨迹了&#xff0c;看看自己的快递运输到哪里了。今天小编给大家推荐一款快递信息查询软件&#xff1a;“固乔快递查询助手”&#xff0c;这款软件能够自动识别单号…

管理类联考——英语——知识篇——考研英语熟词生义

考研英语熟词生义 A 1.abandon【生义】放松&#xff0c;沉溺 2.abide【【生义】容忍&#xff0c;经受住 3.abroad【生义】广为流传&#xff0c;传开 4.abrupt【生义】陡峭的&#xff0c;险峻的 5.absent【生义】漫不经心的 6.absolute【【生义】基本的 7.absorb【生义】…