4.MyBatis源码解析-MyBatis扩展点--阿呆中二

MyBatis

本文是对mybatis 3.x源码深度解析与最佳实践学习的总结,包括XML文件解析流程SqlSession构建流程CRUD执行流程MyBatis扩展点,以及针对面试题进行源码分析。

mybatis 3.x源码深度解析与最佳实践下载:https://download.csdn.net/download/u013425841/12816685

MyBatis扩展点

MyBatis提供4个扩展点:

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

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

  3. ResultSetHandler
    用于处理SQL的返回结果

  4. ParmeterHandler
    用于设置参数

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

一、所有需要代理的类,通过调用pluginAll方法,传入被代理的目标类对象,通过循环所有的interceptors拦截器
在这里插入图片描述
二、看interceptor.plugin方法
在这里插入图片描述
可以看到调用了wrap方法,该方法创建了代理对象Plugin类
在这里插入图片描述
因此代理类创建之后,所有的情况都会通过inovke方法, invoke方法则调用interceptor进行业务逻辑处理。

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

在这里插入图片描述

MyBatis扩展点至此结束,更多内容可以留言讨论
在这里插入图片描述

与我联系

Java/一对一零基础辅导/公司项目一对一辅导/日常Bug解决/代码讲解/毕业设计等 微信:study_51ctofx

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值