Mybatis之接口代理(二)

Mybatis之接口代理(二)

一、前言:

​ mybatis框架有四大步骤,分别为接口代理、门面会话、执行器、jdbc处理器,前面提及Executor执行器,放在前面是因为它是主要成员,本文将针对接口代理进行展开.

二、接口代理

* 模拟Mapper接口,动态代理调用方法

avatar

* 通sqlSession.getMapper(SysUserMapper.class)获得了我们在mybatis中的代理对象,是不是很神奇,让我们往下看,这里做个小提示(当前sql会话为DefaultSqlSession).

avatar
​ * 进入源码我们发现这个方法为我们返回了一个当前sql会话中的一个对应的mapper映射对象.怎么获得的了,继续往下看.

avatar

avatar

avatar

avatar

  • 通过configuration大管家获得mapper,这里做个小提示(configuration是mybatis的配置总站),然后通过mapperRegistry(Mapper接口注册中心)获得mapper,最后直接在注册中心的存储器中获取mapper接口代理工厂.

    张三:这是动态代理

    李四:不,是静态代理

​ 李四:不这是静态代理

​ 是什么代理呢?往下瞧

avatar

avatar

​ 这里生成了一个Mapper的代理对象,先不用管,下面会继续说到,Proxy生成一个静态的代理工厂,帮我们创建动态代理对象,张三值得表扬.

​ 张三:既然是jdk的动态代理,调用mapper.selectAll()底层肯定是用的invoke进行的调用

​ 张三这么自信的回答,各位小伙伴肯定也知道是这样啦!让我们继续看

avatar

​ 好家伙,生成的那个代理对象果然就是你这货.

三、总结

​ 我们现在就可以自信的喊出Mybatis接口代理是用的jdk的Proxy生成的动态代理.

  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

请我喝杯咖啡吧~

支付宝
微信