plus 什么是mybais_聊一聊MyBatis Plus是如何拓展MyBatis的

1b05f41f907918f34671dd4575a3f757.png

我们国家人写的, 语言没有差异, 所以源码都能看懂.

​首先我们只解释为什么他可以做到不写SQL . 我们回答这个问题. 其实拓展Mybatis是个很麻烦的事 , page-helper依靠的事Mybatis自带的拦截器. 会代理executor执行. 可以看看 org.apache.ibatis.plugin.Plugin 和 org.apache.ibatis.plugin.InterceptorChain 我一直不懂pluginall 是做啥了, 一个循环迭代, 那么为啥要循环, 但是代理层并没有迭代哇. 我不懂,有小伙伴懂可以点我联系方式.

​说完Mybatis我们聊聊 Plush咋做的. 其实由了解过TKmapper也和他做法相似.

简单开始 :

public interface OrderMapper extends BaseMapper{

}

复制代码

为啥要实现这个接口呢. 接口一般是代理 , 所以其实他修改了原来Mybatis的代理逻辑. 在 com.baomidou.mybatisplus.core.override.PageMapperProxy 这个类里. 其实他基本重写了Mybatis注册逻辑. 但是流程不变, 比如

他封装了一个 MybatisConfiguration 继承了 Configuration ,

其次就是MybatisMapperRegistry 和 MapperRegistry ,

PageMapperProxy 和 MapperProxy ,

PageMapperMethod 和 MapperMethod ,

MybatisSqlSessionTemplate 和 SqlSessionTemplate代理关系. (这里是Spring的)

流程不说了, 就是Configuration就是元信息. 给了SqlSession. 其次我们拿Mapper依靠的是 MapperRegister拿到一个代理对象. 剩余的流程就是Executor不断的委托代理执行, 其实也类似于装饰着模式. 就是a只做缓存, 查询的交给下一级 . 可以说包装了一层缓存.

其实说到这里也很简单 , 获取一个SQL 就行了, 所以有一个接口 com.baomidou.mybatisplus.core.conditions.ISqlSegment 来获取SQL . 下层有

他的Wrapper 类了, 就负责包装SQL . com.baomidou.mybatisplus.core.conditions.Wrapper 来实现的 . (注意版本不一样, 可能也不一样 . 我是3.0) .

这里负责构建SQL .

@Test

public void testSelect(){

LambdaQueryWrapper eq1 = new LambdaQueryWrapper().eq(Orders::getName, "小李");

System.out.println(eq1.getSqlSegment());

}

复制代码

会输出 :

name = #{ew.paramNameValuePairs.MPGENVAL1}

复制代码

其实如果有人Debug不知道ew是什么? 其实就是个占位符, ew的意思是 EntityWrapper , 是2.X版本的玩意, 但是迁移把他删了.

就是依靠这个玩意来构建SQL . 最后把他给 SqlStatement. 也就能获取最后的SQL了.

反正我就记录一下. 也就是 上层全部有MybatisPlush进行封装了. 但是核心部分还是Mybatis . MybatisPlus也就是基于原来进行继续来覆盖核心方法 . 或者增强.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值