小李的Mybatis学习笔记(二)

MyBatis的实现原理:

Mybatis的实现是基于动态代理机制来进行实现的,主要是的在Mapper接口上使用了动态代理。

原理图:

  1. 通过sqlSession.getMapper(XXXMapper.class) 方法,MyBatis 会根据相应的接口声明的方法信息,通过动态代理机制生成一个Mapper 实例。
  2. 使用Mapper 接口的某一个方法时,MyBatis 会调用MapperProxy类的invoke()方法。
  3. 底层还是通过SqlSessionselectupdatedeleteinsert等方法来实现对数据库的操作。
  4. 源码讲解

代理模式:即对某个对象创建一个代理对象,并由代理对象控制原对象并对原对象进行引用

  1. 静态代理

    • 由程序员创建代理类或特定工具自动生成源代码再对其编译。在程序运行前代理类的.class文件就已经存在了

  2. 动态代代理

    • 在程序运行时运用反射机制动态创建而成

  3. 代理的使用意义

    • 中介隔离作用:在某些情况下,客户类不想或者不能直接引用一个委托类,此时代理对象就在客户端和委托类之间起到一个中介的作用,间接地建立客户端和委托类之间的连接。

    • 体现六大设计模式的开闭原则,增强功能:

      • 代理类除了作为客户端和委托类之间的中介外,我们还可以给代理类增加一些额外的功能,比如像日志记录,某些消息统计等,这样我们就可以尽量避免修改委托类源代码的同时还间接地给委托类增加了一些新的功能,即对于扩展是开放的,但对于修改是封闭的,体现了开闭原则。

      • 代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后对返回结果的处理等。代理类本身并不真正实现服务,而是同过调用委托类的相关方法,来提供特定的服务。真正的业务功能还是由委托类来实现,但是可以在业务功能执行的前后加入一些公共的服务。

 


 

持续更新中~~~~~~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值