Mybatis架构总结

5 篇文章 0 订阅
3 篇文章 0 订阅

基础支持层

基础支持层包含整个Mybatis的基础模块,这些模块为核心处理层的功能提供了良好的支撑。下面简单描述各个模块的功能。

1.反射模块

Java中的反射虽然功能强大,但对大多数开发人员来说,写出高质量的反射代码还是有一定难度的。MyBatis中专门提供了反射模块,该模块对Java原生的反射进行了良好的封装,提供了更加简洁易用的API,方便上层使调用,并且对反射操作进行了一系列优化,例如缓存了类的元数据,提高了反射操作的性能。

2.类型转换模块

正如前面示例所示,MyBatis为简化配置文件提供了别名机制,该机制是类型转换模块的主要功能之一。类型转换模块的另一个功能是实现JDBC类型与Java类型之间的转换,该功能在为SQL语句绑定实参以及映射查询结果集时都会涉及。在为SQL语句绑定实参时,会将数据由Java类型转换为JDBC类型;在映射结果集时,会将数据有JDBC类型转换为Java类型。

3日志模块

无论在开发测试环境中,还是在线上生产环境中,日志在整个系统中的地位都是非常重要的。良好的日志功能可以帮助开发人员和测试人员快速定位Bug代码,也可以帮助运维人员快速定位性能瓶颈等问题,目前的Java世界中存在很多优秀的日志框架,例如Log4j,log4j2,slf4j等,Mybatis 作为一个设计优良的框架,除了提供详细的日志输出信息,还要能够继承多种日志框架,其日志模块的一个这组合要功能就是集成第三方框架。

4资源加载模块

资源加载模块主要是对类加载器进行封装,确定类加载器的使用顺序,并提供了加载类文件以及其他资源文件的功能。

解析器模块:主要提供了两个功能:一个功能是对XPath进行封装,为Mybatis初始化解析mybatis-config.xml配置文件以及映射配置文件提供支持;另一个功能是为处理动态Sql语句中的占位符提供支持。

数据源模块是实际开发中常用的组件之一,MyBatis自身提供了相应的数据源实例,当然MyBatis也提供了与第三方数据源集成的接口,这些功能都位于数据源模块之中。

5事务管理

MyBati对数据库中的事务进行了抽象,其自身提供了相应的事务接口和简单实现。在很多场景中,MyBatis会与Spring框架集成,并由Spring框架管理事务。

缓存模块:在优化系统性能是,优化数据库性能是非常重要的一个环节,而添加缓存则是优化数据库时最有效的手段之一。正确,合理的使用缓存可以将一部分数据库请求拦截在缓存这一层。

MyBatis中提供了一级缓存和二级缓存。这两级缓存都是依赖于基础支持层中的缓存模块实现的,MyBatis自带的这两级缓存与MyBatis以及整个应用是运行在同一个JVM中的,共享同一块对内存,如果这两级缓存中的数据量较大,则可能影响系统中其他功能的运行,所以当需要缓存大量数据时,有限考虑Redis,Memcahe等缓存产品。

6.Binding模块

在调用SqlSession相应方法执行数据库操作时,需要指定映射文件中定义的SQL节点,如果出现拼写错误,我们只能在运行时才能发现相应的异常。为了尽早发现这种错误,MyBatis通过Binding模块将用户自定义的Mapper接口与映射配置文件关联起来。系统可以通过调用自定义Mapper接口中的方法执行相应的SQL语句完成数据库操作,从而避免上述问题。

核心处理层

在核心处理层中实现了MyBatis的核心处理流程,其中包括MyBatis的初始化以及完成一次数据库操作的涉及全部流程。下面简单描述各个模块的功能。

1.配置解析

在MyBatis初始化过程中,会加载mybatis-config.xml配置文件,映射配置文件以及Mapper接口中的注解信息,解析后的配置信息会形成相应的对象并保存到Configuration对象中。

2.SQL解析与scripting模块

拼凑SQL语句是一件烦琐且易出错的过程,MyBatis实现动态SQL语句的功能,提供了多种动态SQL语句对应的节点。

MyBatis中的scripting模块会根据用户传入的实参,解析映射文件中定义的动态SQL节点,并形成数据库可执行的SQL语句,之后会处理SQL语句中的占位符,绑定用户传入的实参。

3.SQL执行

SQL语句的执行涉及多个组件,其中比较重要的是Executor,StatementHandler,ParameterHandler和ResultSetHandler.其中Executor主要负责维护一级缓存和二级缓存,并提供事务管理的相关操作,他会将数据库相关操作委托给StatementHandler完成。StatementHandler首先通过ParameterHandler完成SQL语句的实参绑定,然后通过java.sql.Statement对象执行SQL语句并得到结果集,最后通过ResultSetHandler完成结果集的映射,得到结果对象并返回。

4.插件

MyBatis自身的功能虽然强大,但是并不能完美的切合所有的应用场景,因此MyBatis提供了插件接口,可以通过添加用户自定义插件的方式对MyBatis进行扩展。用户自定义插件可以改变MyBatis的默认行为,例如,我们可以拦截SQL语句并对其重写。由于用户自定义插件会影响MyBatis的核心行为,在使用自定义插件之前,开发人员需要了解MyBatis内部的原理,这样才能编写出好的插件。

接口层

接口层相对简单,其核心是SqlSession接口,该接口定义了MyBatis暴露给应用程序调用的API,也就是上层应用与MyBatis交互的桥梁,接口层在接收到调用请求是,会调用核心处理层的相应模块来完成具体的数据库操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值