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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值