美文网首页
MyBatis进阶版(三)

MyBatis进阶版(三)

作者: 一人有一个架构师梦想 | 来源:发表于2020-10-17 16:49 被阅读0次

目录:
1.掌握MyBatis的工作流程
2.掌握MyBatis的架构分层与模块划分
3.掌握MyBatis缓存机制
4.通过阅读MyBatis源码掌握MyBatis底层工作原理与设计思想
一、MyBatis工作流程
1.解析配置文件
首先在MyBatis启动的时候我们要去解析配置文件,包括全局配置文件和映射器配置文件,也就是SQL。它们会被解析成Configuration。

2.提供操作接口
SqlSessionFactory包含了所有的配置文件,通过它提供的builder来创建工厂类SqlSession。注意,它不是SQL的真正执行对象。

3.执行SQL操作
SqlSession持有Executor对象,用来封装对数据库的操作,即是把Statement封装成StatementHandler来处理参数/执行SQL/处理结果集。


image.png

二、MyBatis架构分层与模块划分


image.png

三、MyBatis缓存详解
1.cache缓存
目的:提升查询性能,减少数据库压力。
级别:一级缓存/二级缓存,并且提供集成第三方缓存接口。
额外功能:回收策略、日志记录(命中率)、定时刷新等。
分类:基本缓存、淘汰算法缓存、装饰器缓存。
2.一级缓存
同一个会话里面,SQL一样,直接从内存拿结果。(默认打开)
put:BaseExecutor的query()--queryFromDatabase()中存入
get:query()的时候,先get
clear:同一个会话的insert/update/delete
缺点:跨会话造成脏数据。通过二级缓存解决,它是namespace级别,可以被多个SqlSession共享。
流程:二级缓存拿到结果,就直接返回,否则再到一级缓存,最后到数据库。
3.二级缓存
1)事务不提交,缓存不生效
2)默认关闭
3)使用场景:单表操作。因为不同的namespace(不同表)不共享缓存,跨表操作造成另一个namespace的缓存没有刷新,导致脏数据。
备注:跨namespace缓存可以设置cache-ref。这种情况下,多个Mapper操作都会引起缓存刷新,反而会影响性能,缓存意义不大了。

四、MyBatis源码解读
1.带问题去看,猜想验证
2.学编程风格,设计思想。他的代码为什么这样写,如果不这样写会怎么样?包括接口的定义,类的职责,涉及模式的应用等。

1.配置解析过程
1)建造者模式SqlSessionFactoryBuilder()解析mybatis-config.xml
2)XMLConfigBuilder解析
XMLMapperBuilder:解析Mapper映射器
XMLStatementBUilder:解析增删改查标签
XMLScriptBuilder:解析动态SQL
2.会话创建过程
1)创建执行器
2)缓存装饰
3)插件代理
4)返回SqlSession实现类
3.获取Mapper对象
1)getMapper()返回代理对象
2)直接代理接口。因为Mapper只为找到无Statement ID,在MapperProxy就可以完成,因此无需实现类。
4.执行SQL
1)MapperProxy.invoke(),走缓存,插件拦截。
......
2)创建StatementHandler对象--Statement对象,含四个种插件拦截。

五、Mybatis核心对象


image.png
image.png

相关文章

  • MyBatis进阶版(三)

    目录:1.掌握MyBatis的工作流程2.掌握MyBatis的架构分层与模块划分3.掌握MyBatis缓存机制4....

  • 精雕细琢!阿里大师53天悉心打磨出来的MyBatis+设计模式架

    全文内容目录一览 Java设计模式实践指南(字节跳动版) MyBatis入门到进阶(含面试题解) MyBatis底...

  • MyBatis进阶版(一)

    开篇 背景:普通本科,两年工作经验。2020年9月面试了很多家中型企业(易方达、卓越教育、奥威亚电子、名动软件、搜...

  • MyBatis进阶版(二)

    应用分析与最佳实践 为什么用Mybatis?JDBC工具类什么是ORM框架MyBatis特性总结 Mybatis ...

  • MyBatis进阶版(四)

    目录1.掌握插件的使用方法和工作原理2.掌握自定义插件的编写方法3.掌握Spring集成MyBatis的原理 一、...

  • Netty图解(二):进阶版的NIO

    进阶版--NIO通信server端部分代码: 进阶版--NIO通信client端部分代码: 进阶版--NIO通信执...

  • android进阶之路精简版

    《android进阶之路精简版》 转载注明出处: android进阶之路精简版

  • Mybatis进阶

    基本知识 resultMap constructor–实例化的时候通过构造器将结果集注入到类中oidArg– ID...

  • MyBatis进阶

    对象之间的关系: 关联关系:A对象依赖B对象,并且把B对象作为A对象的一个属性,则A和B是依赖关系. ** 按照多...

  • mybatis进阶

    1. insert返回主键id 添加useGeneratedKeys,keyProperty即可。 KeyProp...

网友评论

      本文标题:MyBatis进阶版(三)

      本文链接:https://www.haomeiwen.com/subject/fkhkpktx.html