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

简介: 干翻Mybatis源码系列之第十篇:Mybatis Plugins基本概念与拦截概述


前言

插件不属于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当中的方法是最常用的,原因如下:

StatementHandler才是真正Mybatis当中与数据库进行通讯的,Executor当中的query方法和update方法也是交个StatementHanler进行操作。所以,我们来拦截Executor意义不大,拦截StatementHandler才是最正确的方式。

相关文章
|
3月前
|
SQL XML Java
mybatis-源码深入分析(一)
mybatis-源码深入分析(一)
|
2月前
|
前端开发 Java 数据库连接
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
本文是一份全面的表白墙/留言墙项目教程,使用SpringBoot + MyBatis技术栈和MySQL数据库开发,涵盖了项目前后端开发、数据库配置、代码实现和运行的详细步骤。
77 0
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
|
2月前
|
Java 数据库连接 mybatis
Springboot整合Mybatis,MybatisPlus源码分析,自动装配实现包扫描源码
该文档详细介绍了如何在Springboot Web项目中整合Mybatis,包括添加依赖、使用`@MapperScan`注解配置包扫描路径等步骤。若未使用`@MapperScan`,系统会自动扫描加了`@Mapper`注解的接口;若使用了`@MapperScan`,则按指定路径扫描。文档还深入分析了相关源码,解释了不同情况下的扫描逻辑与优先级,帮助理解Mybatis在Springboot项目中的自动配置机制。
176 0
Springboot整合Mybatis,MybatisPlus源码分析,自动装配实现包扫描源码
|
4月前
|
XML Java 数据库连接
mybatis源码研究、搭建mybatis源码运行的环境
这篇文章详细介绍了如何搭建MyBatis源码运行的环境,包括创建Maven项目、导入源码、添加代码、Debug运行研究源码,并提供了解决常见问题的方法和链接到搭建好的环境。
mybatis源码研究、搭建mybatis源码运行的环境
|
4月前
|
Web App开发 前端开发 关系型数据库
基于SpringBoot+Vue+Redis+Mybatis的商城购物系统 【系统实现+系统源码+答辩PPT】
这篇文章介绍了一个基于SpringBoot+Vue+Redis+Mybatis技术栈开发的商城购物系统,包括系统功能、页面展示、前后端项目结构和核心代码,以及如何获取系统源码和答辩PPT的方法。
|
4月前
|
供应链 前端开发 Java
服装库存管理系统 Mybatis+Layui+MVC+JSP【完整功能介绍+实现详情+源码】
该博客文章介绍了一个使用Mybatis、Layui、MVC和JSP技术栈开发的服装库存管理系统,包括注册登录、权限管理、用户和货号管理、库存管理等功能,并提供了源码下载链接。
服装库存管理系统 Mybatis+Layui+MVC+JSP【完整功能介绍+实现详情+源码】
|
4月前
|
缓存 Java 数据库连接
我要手撕mybatis源码
该文章深入分析了MyBatis框架的初始化和数据读写阶段的源码,详细阐述了MyBatis如何通过配置文件解析、建立数据库连接、映射接口绑定、动态代理、查询缓存和结果集处理等步骤实现ORM功能,以及与传统JDBC编程相比的优势。
我要手撕mybatis源码
|
7月前
|
SQL Java 数据库连接
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射
【Mybatis】深入学习MyBatis:概述、主要特性以及配置与映射
|
7月前
|
SQL 缓存 Java
|
7月前
|
XML Java 数据库连接
探秘MyBatis:手写Mapper代理的源码解析与实现
探秘MyBatis:手写Mapper代理的源码解析与实现
96 1

相关实验场景

更多