MyBatis提供4个扩展点:

1、Executor执行器接口扩展点

用于执行一系列的SQL操作,底层是使用StatementHandler接口进行原子的SQL操作,Executor在StatementHandler之上进行了一层包装,比如ReuseExecutor执行器,在上层包装了对Statement的缓存,这样达到一个性能提升的作用
在这里插入图片描述

2、StatementHandler扩展点

Statement接口是Java执行数据库行为的重要接口,Mybatis的StatementHandler的实现,也正是对应Statement接口三个实现类(CallableStatement\PreparedStatement\Statement),实现类都是mysql驱动包里的。
所以,StatementHandler是直接调用mysql驱动包实现对数据库的增删改查操作,
在这里插入图片描述

3、ResultSetHandler扩展点

用于处理SQL的返回结果

4、ParameterHandler扩展点

用于设置参数

5、扩展点原理

以上所有扩展点的方式都是通过InterceptorChain来设置的,底层使用的jdk动态代理
在这里插入图片描述

所有需要代理的类,通过调用pluginAll方法,传入被代理的目标类对象,通过循环所有的interceptors拦截器
在这里插入图片描述
在这里插入图片描述

调用了wrap方法,该方法创建了代理对象Plugin类
在这里插入图片描述

因此代理类创建之后,所有的情况都会通过inovke方法, invoke方法则调用interceptor进行业务逻辑处理。

6、扩展实例

1、分页插件pagehelper

分页插件的实现原理,即是根据拦截Executor执行器,实现了Interceptor接口,在interceptor方法中写分页的业务逻辑
在这里插入图片描述

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐