MyBatis: 插件是怎么起作用的?

news2024/12/23 10:16:01

示例:
假如配置了PageHelper插件

public class MyBatisTest10 {
    public static void main(String[] args) throws IOException {
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(
                Resources.getResourceAsStream("mybatis-config.xml"));
        
        SqlSession sqlSession = sqlSessionFactory.openSession();
        List<Country> countries = sqlSession.getMapper(PersonMapper.class).selectCountry2(1, 2);
        System.out.println(countries.size());
        System.out.println(countries);
    }
}

执行sqlSessionFactory.openSession()时,进入openSession方法,代码如下:
在这里插入图片描述
其中调用的openSessionFromDataSource,其代码如下:
在这里插入图片描述
其中调用了configuration对象的newExecutor方法,该方法代码如下:
在这里插入图片描述
其中调用了interceptorChain对象的pluginAll方法,interceptorChain对象中为我们定义的所有实现了Interceptor接口的类,PageInterceptor就是其中之一。pluginAll方法代码如下:
在这里插入图片描述
从上图可以看到,这个方法中会遍历所有interceptor,然后调用其plugin方法,PageInterceptor的plugin方法代码如下:
在这里插入图片描述
其中调用的wrap方法代码如下:
在这里插入图片描述
该方法位于Plugin类,我们可以看到,它使用了JDK动态代理生成了代理对象。
可见,所有的插件最后都是通过生成动态代理对象来实现其功能的。

调用的时候,会调用Plugin类的invoke方法,其代码如下:
在这里插入图片描述
可以看到,其中调用了interceptor的intercept方法,如果我们配置了PageInterceptor,则会走到PageInterceptor的intercept方法进行执行,该方法代码如下:
在这里插入图片描述
在这里插入图片描述

该方法真正完成了分页查询

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

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

相关文章

iOS开发Swift-11-正向传值,搜索,反向传值,城市id获取天气,光标聚焦,拦截空白/空格字符-和风天气App次页代码

1.创建次页的controller class 在Main中选择次界面,点击左上方黄色的圈圈,将它的Custom Class中的class修改为QueryViewController. 将QueryViewController中自动生成的首页传值方法复制到ViewController中去.去掉注释符号. 2.在Main中给1页向2页传值的箭头命名为QueryVi…

怎么在树莓派上搭建WordPress博客网站,并发布到外网可访问?

文章目录 序幕概述1. 安装 PHP2. 安装MySQL数据库3. 安装 Wordpress4. 设置您的 WordPress 数据库设置 MySQL/MariaDB创建 WordPress 数据库 5. WordPress configuration6. 将WordPress站点发布到公网安装相对URL插件修改config.php配置 7. 支持好友链接样式8. 定制主题 序幕 …

msvcp100.dll缺失的处理方法,4个修复msvcp100.dll的技巧

其实只要是经常使用电脑的人&#xff0c;那么迟早会遇到一个问题&#xff0c;那就是dll文件的丢失&#xff0c;它会提示你的电脑缺失了某某dll文件&#xff0c;如msvcp100.dll找不到&#xff0c;msvcp100.dll缺失等等&#xff0c;今天我们主要来讲一下&#xff0c;万一你的电脑…

车间作业分析重点分析的内容是哪些?

我们通常所说的车间作业分析&#xff0c;就是为提高作业效率和消除浪费而充分了解作业内容的构成因素和区分作业&#xff0c;并了解其组合是否有浪费现象&#xff0c;为提高分析要素作业的方法。 经过作业分析&#xff0c;可以查漏补缺&#xff0c;能发现平时正常作业时不易觉察…

工商银行潍坊分行党建RPA机器人项目解析

01 案例背景&#xff1a;银行业掀起引入RPA加速实现数字化转型的浪潮 近年来&#xff0c;金融科技的蓬勃发展极大促进了银行的业务创新&#xff0c;新技术、新业态层出不穷。随着银行业务和科技的融合逐步落实&#xff0c;银行业务正朝着线上化、智能化转变。科技赋能的转型范…

关于运行franka_ros包中的franka_gazebo报错VMware: vmw_ioctl_command error 无效的参数.

参考的博文&#xff0c;感谢&#xff0c;解决Vmware下虚拟机下打开gazebo报错 &#xff0c;VMware: vmw_ioctl_command error 无效的参数. 首先第一个VMware: vmw_ioctl_command error 无效的参数的问题。这应该是虚拟机的bug&#xff0c;毕竟使用虚拟机和真实的物理机上是有差…

Mysql数据库基础总结:

什么是数据库&#xff1a; 数据库&#xff08;DataBase&#xff09;&#xff1a;存储和管理数据的一个仓库。 数据库类型分为&#xff1a;关系型数据库和非关系型数据库。 关系型数据库&#xff08;SQL&#xff09;&#xff1a;存储的数据以行和列为格式&#xff0c;类似于e…

二.RocketMQ基础概念及名词说明

RocketMQ基础概念及名词说明 一&#xff1a;RocketMQ基本概念1.消息&#xff08;Message&#xff09;2.生产者(Producer)3.消费者(Consumer)4.分组(Group)&#xff1a;4.主题&#xff08;Topic&#xff09;5.标签&#xff08;Tag&#xff09;6.队列&#xff08;Queue&#xff0…

Springboot 实践(15)spring config 配置与运用—自动刷新

目前&#xff0c;网络上讲解spring config的自动刷新&#xff0c;都是通过git服务站的webhook功能执行“actuator/bus-refresh”服务实现的自动刷新。我们的前文讲解的配置中心&#xff0c;配置中心仓库使用的时本地地址&#xff0c;如下图所示&#xff1a; 那么&#xff0c;配…

JVM 虚拟机 ---> JVM 基础概念

文章目录 JVM 虚拟机 ---> JVM 基础概念一、Java 跨平台主要原因 二、JVM 的组成结构三、Java 代码执行流程四、JVM 的生命周期 JVM 虚拟机 —> JVM 基础概念 一、Java 跨平台 Java是一种可跨平台的编程语言&#xff0c;我们通常把CPU处理器与操作系统构成的计算机系统…

记录vxe-table show-overflow失效问题

后来发现&#xff0c;在使用的过程中发现vxe-table的show-overflow在普通的界面是生效的&#xff0c;但是在el-dialog对话框始终不出现 超出的文本鼠标移上去没有显示全部 排查后发现和tooltip的z-index有关&#xff0c;modal的z-index比tooltip的z-index大&#xff0c; 方法…

行业报告 | 智慧三角:长三角掀起AI产业热潮

原创 | 文 BFT机器人 产业集群是指在特定地理区域内&#xff0c;一群相关产业相互依存、相互关联、相互支持&#xff0c;形成密集的产业网络和价值链条的现象&#xff0c;这些相关产业可能涵盖整个产业链的不同环节&#xff0c;从原材料供应到产品研发、生产、销售和服务等多个…

回显服务器

写一个应用程序,让这个程序可以使用网络通信,这里就需要调用传输层提供的api,传输层提供协议,主要是两个: UDP,TCP,它们分别提供了一套不同的api,socket api. UDP和TCP UDP:无连接,不可靠传输,面向数据报,全双工 TCP:有连接,可靠传输,面向字节流,全双工 一个客户端可以连接多…

【计算机组成原理】读书笔记第一期:对程序员来说CPU是什么

目录 写在开头 CPU的结构 功能的角度 程序员的角度 寄存器与程序的执行流程 程序计数器 条件分支与循环 函数的调用流程 通过地址和索引实现数组 CPU的处理过程 结尾 写在开头 近期经他人推荐&#xff0c;正在阅读《程序是怎样跑起来的》这本书&#xff08;作者&…

为虚拟化环境带来更强I/O性能!SR-IOV技术简介

在 ICT 行业&#xff0c;不断提高硬件资源的使用效率是技术发展路线中亘古不变的主旋律。虚拟化作为其中最为主要的解决方式之一&#xff0c;其带来的影响早已不言而喻。而今天我们要说的&#xff0c;正是虚拟化中一项非常重要的技术 —— SR-IOV&#xff0c;也是下一代高端企业…

每日一练 | 网络工程师软考真题Day32

阅读以下说明&#xff0c;答复以下【问题1】至【问题5】 【说明】 某公司内部效劳器S1部署了重要的应用&#xff0c;该应用只允许特权终端PC1访问&#xff0c;如图4-1所示。为保证通信平安&#xff0c;需要在S1上配置相应的IPSec策略。综合考虑后&#xff0c;确定该IPSec策略如…

龙迅LT86204UX HDMI二进四出 支持高达4K60HZ的分辨率

龙迅LT86204UX 1.描述&#xff1a; LT86204UX HDMI2.0/1.4交换机具有2&#xff1a;4的开关&#xff0c;符合HDMI2.0/1.4规格&#xff0c;最大6Gbps高速数据速率&#xff0c;自适应均衡RX输入和预先强调的TX输出。LT86204UX HDMI2.0/1.4交换机自动检测电缆损耗&#xff0c;并自…

上位机的社会工作发展前景

在元宇宙发展的趋势下&#xff0c;上位机已经融合了虚拟现实&#xff08;VR&#xff09;和增强现实&#xff08;AR&#xff09;技术。我们不能局限于传统的电脑上的上位机开发&#xff0c;作为工控领域的从业者&#xff0c;我们应该打通PLC与各种先进外设的互通和互信。无论是i…

【C-C++源码】仓库管理系统 期末课设必备源码

文章目录 介绍 介绍 有两个版本&#xff0c;一个是C语言&#xff0c;一个是C&#xff0c;自行选择&#xff0c;VC、VS、devc等各编译器均可运行。代码注释齐全&#xff0c;容易理解,代码量850行。 printf("需要源码&#xff0c;可以百度&#xff1a;学长敲代码")&…

risc-v dv源代码分析

地址为 GitHub - chipsalliance/riscv-dv: Random instruction generator for RISC-V processor verificationRandom instruction generator for RISC-V processor verification - GitHub - chipsalliance/riscv-dv: Random instruction generator for RISC-V processor verif…