面试官:MyBatis 插件有什么用途?说说底层原理?我竟然不会。。

4db005d5786f5eb0c3fe7f7e154694a1.png

若有收获,请记得分享和转发哦

背景

关于Mybatis插件,大部分人都知道,也都使用过,但很多时候,我们仅仅是停留在表面上,知道Mybatis插件可以在DAO层进行拦截,如打印执行的SQL语句日志,做一些权限控制,分页等功能;但对其内部实现机制,涉及的软件设计模式,编程思想往往没有深入的理解。

本篇案例将帮助读者对Mybatis插件的使用场景,实现机制,以及其中涉及的编程思想进行一个小结,希望对以后的编程开发工作有所帮助。

注:本案例以mybatis 3.4.7-SNAPSHOT版本为例。

PS:文章是挺久之前写的,当时花了一些心思,存到电脑的word里,今天正好看到,就是里面的源码都是图片,哈哈哈,凑合着看吧。

Mybatis插件典型适用场景

分页功能

mybatis的分页默认是基于内存分页的(查出所有,再截取),数据量大的情况下效率较低,不过使用mybatis插件可以改变该行为,只需要拦截StatementHandler类的prepare方法,改变要执行的SQL语句为分页语句即可;

7310f789e14f6c77b7c7a8ada9eb70f0.png

ba0a8925ee5169ad49c288ecae8907dd.png

9aa262472df676d3807e6c1cdbfcd849.png

2ec9911a8bdb853cf8ae4e18a2023e8e.png

如下是时序图,在整个时序图中,涉及到mybatis插件部分已标红,基本上就是体现在上文中提到的四个类上,对这些类上的方法进行拦截。

c3caf0223e8c276edc23c1f014e33861.png

Mybatis插件实现机制

33b071269fb2a32ab4f8a2ec0be28f90.png

0be8ba03e0d0edd5e91b97b8572b639a.png

b4c51b762cc769d982f90a70e17f2425.png

96a5bb0338c7d2252f29c9d092214dcf.png

4a1445e53f59291d93ed7c8083e26979.png

edd0b159bcc36c292c887a351709cbbe.png

18b9dab54d6939fc85bd954c81b035e4.png

66243823eaaf4daab6ef65781663575b.png

a2ac86997fa746a2069e432d6dfd1577.png

290beb3d6dd1ac46932306f8f85c2d2d.png

2770b3da19dde27cd823f16f9af49d25.png

93806a61e2facad6284e0e665903378f.png

0d4f783cd9d79e629e9b1f540270a328.png

b75accb4a7898bac06884345d8823e40.png

814ffb9363bf2667d9f879785a72728f.png

c84808445fcae79cdec3d89ff69180aa.png

b962947a158742dbe0adfbfe4f6dbb1c.png

b586640a3e4db5160ce69370b41238eb.png

8ac01993654fab6423c4eba06591175b.png

36a7447a547a968676e72dcf0b8abff3.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值