写点什么

聊聊 mybatis 的架构模块

作者:周杰伦本人
  • 2022-11-21
    山东
  • 本文字数:1354 字

    阅读完需:约 4 分钟

聊聊 mybatis 的架构模块

mybatis 相信大家都用过,入门级的连接数据库并操作的就是 jdbc,通过官方的介绍,我们知道 mybatis 有三层架构:基础支撑层,核心处理层和接口层,接口层就是 mybatis 对外开放的一些接口,比如 SQLSession,SQLSessionFactory 等接口,下面我介绍一下 mybatis 的基础层和核心处理层包含的东西。

基础层

基础层显然就是提供一下基础功能的模块

类型转换模块

类型转换模块,它的功能主要是实现 jdbc 类型和 java 类型的互相转换,例如我们通过在调用 sql 语句的时候需要通过用户传入的参数类进行运行 sql,这时候通过 mybatis 的类型转换模块,而结果集的返回映射到 java 对象中也需要类型转换,另外 mybatis 的别名机制也是类型转换模块的内容

数据源模块

数据源模块顾名思义就是对数据源的支持,mybatis 开发数据源模块能更方便的切换数据源。

binding 模块

binding 模块也是 mybatis 的重点模块,我们 mapper 接口和 xml 的匹配就是通过 binding 模块生成 mapper 接口的动态代理对象来完成的

缓存模块

还有就是缓存模块,大家都知道 mybatis 有一级缓存和二级缓存,一级缓存是基于 sqlsession 的缓存,二级缓存是 mapper 级别的缓存,可以通过 cache 标签来开启,mybatis 的二级缓存可能出现脏读问题,所以不建议使用,一般我们用 redis 来进行缓存

反射工具模块

还有反射工具模块,mybatis 有自己的反射工具,它是基于 java 的反射来进行封装的

解析器模块

解析器模块顾名思义就是解析文件的,mybatis 中的 xml 文件都是通过解析器模块来进行解析的,比如 mybatis-config.xml 和 Mapper 接口对应的 xml 文件

日志模块

mybatis 也有自己的日志模块,日志的重要性不言而喻了,生产的问题的定位都是通过日志来进行定位的

事务管理模块

大家可能不知道,mybatis 也有自己的事务管理的模块,而我们一般使用 spring 的事务

核心处理层

核心处理层就尤为重要了,核心处理器的插件模块就不多介绍了,它主要是让用户自定义一些插件,重点介绍一下配置解析模块和 sql 解析和 scripting 模块。

配置解析模块

配置解析模块就是用来解析配置文件的,xml 配置文件会通过配置解析生成配置对象保存在 Configuration 中,通过 Configuration 可以创建 SqlSessionFactory,然后创建 SqlSession。

sql 解析和 scripting 模块

大家都知道,mybatis 支持动态 sql 的拼接,这也得益于 mybatis 的 sql 解析和 scripting 模块,这个模块解析动态 sql 的标签,然后处理 sql 中的占位符,进入参数填充,从而形成真正的 sql,sql 语句都形成了。


接下来就是 sql 的执行了,在 mybatis 中 sql 的执行先是 SqlSession 到 Executor 组件,Executor 调用事务管理模块进行事务的管理,然后使用缓存模块进行一二级缓存的管理,进入 Executor 模块后就是 StatementHandler 模块,StatementHandler 先调用 ParameterHandler 进行实参的绑定,然后通过 Statement 对 sql 语句在数据库中运行,返回结果到 ResultSet,ResultSet 再到 ResultSetHandler,ResultSetHandler 进行结果映射到 Java 对象中,返回结果。

总结

这篇文章我们介绍了 Mybatis 的整体架构模块,以及各个模块的功能作用,接下来的文章我们将会基于源码的角度详细介绍 Mybatis 的各个模块

❤️ 感谢大家

如果你觉得这篇内容对你挺有有帮助的话:


  1. 欢迎关注我❤️,点赞👍🏻,评论🤤,转发🙏

  2. 关注盼盼小课堂,定期为你推送好文,还有群聊不定期抽奖活动,可以畅所欲言,与大神们一起交流,一起学习。

  3. 有不当之处欢迎批评指正。

发布于: 刚刚阅读数: 3
用户头像

还未添加个人签名 2020-02-29 加入

公众号《周结论本人》,多平台优质博主

评论

发布
暂无评论
聊聊mybatis的架构模块_11月月更_周杰伦本人_InfoQ写作社区