远方的灯塔 - 专注于服务端技术分享 远方的灯塔 - 专注于服务端技术分享
首页
  • Java SE
  • Struts2
  • Hibernate
  • MyBatis
  • JAX-WS
  • 并发
  • 分布式
  • Git
  • 《C程序设计语言》
心情随笔
  • 文章分类
  • 文章标签
  • 文章归档
友情链接
关于我
GitHub (opens new window)

Terwer Green

一个后端老菜鸟
首页
  • Java SE
  • Struts2
  • Hibernate
  • MyBatis
  • JAX-WS
  • 并发
  • 分布式
  • Git
  • 《C程序设计语言》
心情随笔
  • 文章分类
  • 文章标签
  • 文章归档
友情链接
关于我
GitHub (opens new window)
  • MyBatis

    • 解析原生JDBC开发问题与优化方案
    • 自定义持久层框架的设计思路
    • 自定义持久层框架的代码实现一
    • 自定义持久层框架的代码实现二
    • 使用getMapper方式对自定义持久层框架进行优化
    • MyBatis的基本介绍及优势
    • MyBatis的基本使用
    • Mybatis基本流程及配置文件解析
    • MyBatis复杂映射开发之一对一查询
    • MyBatis复杂映射开发之一对多查询
    • MyBatis复杂映射开发之多对多查询
    • MyBatis常用注解及基本增删改查的注解实现
    • MyBatis的注解实现复杂映射开发
    • MyBatis缓存的概念
    • 深度剖析MyBatis的一级缓存
    • 深度剖析MyBatis的二级缓存
    • MyBatis的二级缓存整合redis
    • MyBatis-RedisCache源码分析
    • MyBatis机制介绍与原理
      • 插件简介
      • MyBatis 插件介绍
      • MyBatis 允许拦截的方法
      • MyBatis 插件的原理
    • 自定义MyBatis插件
    • 插件源码进一步分析与pageHelper分页插件介绍
    • 通用 Mapper 封装
    • 深入剖析MyBatis的架构原理
  • 《设计模式》

  • 后端开发
  • MyBatis
terwer
2023-02-22
目录

MyBatis机制介绍与原理

该博客介绍了插件的概念及其在 MyBatis 中的应用。MyBatis 插件通过拦截和增强核心组件,如 Executor、StatementHandler、ParameterHandler 和 ResultSetHandler,实现了灵活且可扩展的持久层操作方式。插件的机制利用动态代理技术,使得开发人员能够根据需求选择适合的数据库操作方式,并轻松扩展 MyBatis 的功能。

# 插件简介

什么是插件 插件是一种软件组件,可以在另一个软件程序中添加功能或特性。插件通常被设计成可以 随时添加或删除 的,而不影响 主程序 的功能。插件可以 扩展 软件程序的功能,这让用户可以根据自己的需求定制软件,提高工作效率。常见的插件包括浏览器插件、音频和视频编辑软件的特效插件、图形处理软件的滤镜插件等。

# MyBatis 插件介绍

MyBatis 作为一个通用的 DAO 层框架,也提供了插件的机制,例如:我们可以用插件实现分页、分表、监控等功能。

MyBatis 在四大组件( Exector 、 StatmentHandler 、 ParameterHandler 、 ResultSetHandler )处提供了强大的 插件扩展 机制。

MyBatis 对持久层的操作依赖于这四大核心组件对象。MyBatis 支持通过插件对四大核心组件进行拦截,对 MyBatis 来说,插件就是拦截器,用来增强和信息对象的功能。增强功能底层是借助于 JDK 的动态代理 来实现的,也就是说, MyBatis 的四大核心组件本质上都是代理对象。

总之,MyBatis 的四大核心组件和扩展点提供了灵活和可扩展的持久层操作方式,使得开发人员可以根据具体的应用场景来选择适合的方式来操作数据库。同时,插件机制也提供了一种简单、方便的方式来增强 MyBatis 的功能,扩展 MyBatis 的能力。

​​

# MyBatis 允许拦截的方法

MyBatis 允许拦截哪些方法? Sql 语法构造器 StatementHandler( prepare 、 parameterize 、 batch 、 updates 、 query 等方法) 执行器 Executor ( update 、 query 、 commit 、 rollback 等方法) 参数处理器 ParameterHandler( getParameterObject 、 setParameters 方法) 结果集处理器 ResultSetHandler( handlerResultSets 、 handleOutputParameters 方法)

# MyBatis 插件的原理

插件的原理其实很简单,就是在创建组件的时候生成代理对象( Plugin ),执行组件方法的时候拦截即可。

分为以下几步:

  1. 在项目启动的时候判断组件是否有被拦截,如果没有直接返回原对象。
  2. 如果有被拦截,返回动态代理的对象( Plugin )。
  3. 执行到的组件的中的方法时,如果不是代理对象,直接执行原方法
  4. 如果是代理对象,执行Plugin 的invoke() 方法。

文章更新历史

2024/06/12 同步文章到其他平台

编辑 (opens new window)
#插件#MyBatis#扩展#拦截#动态代理
上次更新: 2024/06/13, 05:26:42
MyBatis-RedisCache源码分析
自定义MyBatis插件

← MyBatis-RedisCache源码分析 自定义MyBatis插件→

最近更新
01
深入剖析MyBatis的架构原理
12-04
02
通用 Mapper 封装
10-09
03
插件源码进一步分析与pageHelper分页插件介绍
10-09
更多文章>
Theme by Vdoing | Copyright © 2011-2024 Terwer Green | MIT License | 粤ICP备2022020721号-1 | 百度统计
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式