聊聊mybatis的架构

举报
周杰伦本人 发表于 2022/07/27 14:28:37 2022/07/27
【摘要】 聊聊mybatis的架构模块 基础层 类型转换模块 数据源模块 binding模块 缓存模块 反射工具模块 解析器模块 日志模块 事务管理模块 核心处理层 配置解析模块 sql解析和scripting模块 总结 聊聊mybatis的架构模块mybatis相信大家都用过,入门级的连接数据库并操作的就是jdbc,通过官方的介绍,我们知道mybatis有三层架构:基础支撑层,核心处理层和接口层,...

聊聊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的各个模块

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。