Mybatis架构解析(源码)最重要!!!!

架构:Mybatis
在这里插入图片描述
数据处理层:
在这里插入图片描述
架支撑层:confg
在这里插入图片描述
引导层:
在这里插入图片描述

源码底层了解:
在这里插入图片描述
查学生:
在这里插入图片描述
这些都是做准备的:为查询 xml 为resource resource为 reader reader为sessionFactory做准备。

重点:::::mybatis 执行步骤:
a. 获得 sqlsessionFactory 对象。new SQLSessionFactory()build(reader);
源码分析:
获取到一个parser解析器 在这里插入图片描述
通过一个解析器返回对象。
进一下parser 方法。parserConfiguration 方法。
在这里插入图片描述
进入parseConfiguration 方法里面。
在这里插入图片描述
在这里插入图片描述

记下来 : 通过parseConfiguration ()这个方法 在configuration标签设置了properties settiing environment 等属性。

有很多设置方式;settingElement: sql执行器默认是simple类型。
将所有的配置信息放在了configuration 对象中。
解析所有的Xxxxmapper.xml文件(分析里面的增删改查标签)在这里插入图片描述
mapperElement ,settingElement…
在这里插入图片描述
在这里插入图片描述
解析mapper 然后将mapper里面的东西放入到configurationElement里面了

parse ------》configuration-(可以处理setting和mapper等)-----》
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
增删改查标签里面你可以设置 数据库环境。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
增删改查可以通过这个方法解析的
在这里插入图片描述
confg 里面的属性在configuratio里面。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
返回configuration对象。这个对象返回什么东西:每一个mapperedstatement 就是一个标签。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
b. 获取SQLSession对象。
源码分析:
a(b(c()))先进C 然后找不到进B 然后找不到进A.枚举类型 。
还是在Configuration 拿到了具体的执行器。

configuration.newExecutor(tx,execType)---->SimpleExecutor.
根据不同类型execType 产生不同的执行器 Executor. ,并且会对执行器进行拦截操作:
executor = (Executor) interceptorChain.pluginAll(executor);
装饰模式,包装模式 变成的强大了。
通过装饰模式将刚才产生的执行器包装成更加强大的 执行器(executor)
作用:以后要Mybatis写自己的插件,就可以通过拦截器实现。把自己的功能加入到拦截器里面。插件开发 : 1 写插件 2 放入拦截器。
自动把自己写的拦截器作用到Executor里面。在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
哪一种执行器。
返回DefaultSqlSession(configuration,exeCutor,事务);-----》

在这里插入图片描述
一切信息在configuration(配置信息,增删改查标签)里面。又加了执行器(exeCutor),用执行器来执行配置内容(configuration)

这一个调用openSession.
在这里插入图片描述
------------------>>>>>>>>>>
在这里插入图片描述
---------------->>>>>>>.opensession 调用openSessionFormDataSource.
在这里插入图片描述
defaultSqlSession 对象里面包括了configuration配置文件 executor执行器 事务所以可以执行了。
在这里插入图片描述

流程::::::

confg mapper 存在了 configuration对象里面。然后configuration存放在SQLSessionFactory , SQLSessionFactory 默认是DefaultSQLSessionFactory对象。
在这里插入图片描述
SQLSession默认是defaultsqlsession.
在这里插入图片描述执行增删改查 是执行器执行。
在这里插入图片描述
执行增删改查 标签。增删改查底层是mappendstatement 对象。
在这里插入图片描述
执行从数据库执行。

c.通过session 获得xxxmapper 的接口代理对象(代理接口中的方法,mapper.xml 中的《select》等标签) 通过代理对象执行 CRUD 源码分析
当我们进入queryStudentByNo 方法本身 执行的不是方法而是进去代理对象的方法。
在这里插入图片描述

获取Xxxxmapper 对象,执行
执行增删改查–>MapperProxy/invoke()---->invocationHandler:JDK动态代理接口。有且仅有一个invoke方法。 用到了动态代理模式;增删改查 - 》代理对象(mapperProxy 对象) - --> 代理对象 帮我们““代理执行””增删改查方法
(中介帮你找房子 代理对象)—》
XXxmapper 代理对象:

执行增删改查时:-----》invoke
cacheMethod 缓存方法。先查看缓存里面有没有 空缓存去库里面 找完在放进库里面 。
SQLSession的对象是defaultSQLSession的对象。执行时通过executor执行。
mapperMethod.execute(sqlSession.args):实际调用增删改查的方法,依靠了SQLSession中的configuration 和executor。。。。。。
在这里插入图片描述
commend gettype 是类型 case 里面进行查询 convertArgsparams
处理增删改查方法的参数 :method.convertArgsCommandparam(args):如果参数是一个return null 如果一个返回一个 如果多个放入map里面。

在这里插入图片描述
增删改查时需要 处理参数 处理参数就是param 参数处理完了处理结果集。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

xxxmapper 执行方法在interface里面。

同时查询会出现高并发问题 和线程问题

d. 执行标签中定义的sql语句。增删改查方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值