@[TOC]

聊聊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. 有不当之处欢迎批评指正。