Mybatis底层原理分析以及源码阅读

发布时间:2023年12月28日

费话不多少先上图,我只喜欢画图分析,看图片:

有两个问题:
问题1: 我们一直在写Mapper/DAO只写了接口,没有写具体的实现吧?

【是的】

问题2: 没有写实现类就没办法实例化执行后续的操作,那么又怎么去访问了数据库,并且拿到了数据呢?

虽说我们没有亲自去写实现类,但是mybatis通过动态字节码技术,也就是动态代理帮我们去生成了代理实现类,比如:我们在UserMapper.java
接口里写了一个insertUser(String username, String passwd, Date
birthday),动态代理会根据这个接口生成具体的实现类,也就是代理了UserMapper.java这个接口,解析参数,然后通过调用SqlSession.select()方法,传入相应的参数,然后由SqlSession去执行后续的操作,比如:调用Executor、StatementHandler等一系列操作。

请先生/公主看源码:

在这里插入图片描述
在这里插入图片描述

注:远程一切的RPC几乎也都是通过代理去实现方法的调用,调用其实就是跨虚拟机同步参数、方法状态的,并不是把另一个虚拟机的方法拿回本地调用哦,还是基于动态代理实现的。

jdk的动态代理大家一定要提前弄清楚,里面源码里面有涉及,程序员使用mybatis就是面向接口的编程,我们在使用时也都是调用接口xxxMapper.java,然后通过唯一namespace匹配到唯一xxxMapper.xml,然后交由mybatis的核心组件执行后续的操作。】
在这里插入图片描述
一条SQL的执行流程是不是很清晰了,还不够清晰的话看看下面的执行链路图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
跟踪链路如下:
在这里插入图片描述

大家在看源码的时候可以从SqlSession入手跟踪,注意Configuration、MappedStatement、StatementHandler之间相互引用的关系,你中有我,我中有你的类与类之间的关系。

文章来源:https://blog.csdn.net/qq_35543206/article/details/135258353
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。