Mybatis手撸(一)Mybatis简介和整体架构

798 阅读2分钟

热衷学习,热衷生活!😄

沉淀、分享、成长,让自己和他人都能有所收获!😄

一、Mybatis简介

MyBatis 官方文档

Mybatis是一款旨在帮助开发人员屏蔽底层重复性的JDBC代码的持久层框架,支持通过配置文件或者注解将ResultSet映射成Java对象。相对于其它ORM框架,Mybatis更为轻量级,支持定制化SQL和动态SQL,方便优化查询性能,同时包含了良好的缓存机制。

二、Mybatis整体架构

Mybatis整体架构如下图:

接口层

  • SqlSession接口层定义了暴露给应用程序调用的API,接口层在收到请求时会调用核心处理层的相关模块完成具体的数据库操作。

核心处理层

  • 配置解析:Mybatis初始化时会加载配置文件、映射文件和Mapper接口的注解信息,解析完毕后会已对象的形式保存到Configuration对象中。
  • SQL解析与scripting 模块:Mybatis支持通过配置实现动态的SQL,即根据不同参数生成SQL
  • SQL执行与结果集映射:Executor负责维护缓存和事务管理,并将数据库操作委托给StatementHandler,ParmaterHandler负责完成SQL语句的实参绑定并通过Statement对象执行SQL,最后通过ResultSet返回结果,交由ResultSetHandler处理映射成Java对象。
  • 插件:支持开发者通过插件接口对Mybatis进行扩展。

基础支持层

  • 数据源模块:提供数据源实现并能集成第三方数据源模块。
  • 事务管理模块:可以和Spring集成开发,对事物进行管理。
  • 缓存模块:提供一级缓存和二级缓存,将部分请求拦截在缓存层,分担数据库压力,提高性能。
  • Binding模块:在调用SqlSession相应方法执行数据库操作时,需要指定映射文件中的SQL节点,Mybatis通过Binding模块将自定义Mapper接口和映射文件关联,避免拼写等错误导致在运行时才被发现。
  • 反射模块:提供封装的反射API,方便上层调用。
  • 类型转换:为简化配置文件提供别名机制,并且实现了Java类型和JDBC类型的转换。
  • 日志模块:能够集成多种第三方日志框架。
  • 资源加载模块:对类加载器进行封装,提供类加载文件和其他资源文件的功能。
  • 解析器模块:对Xpath进行封装,为Mabatis初始化时解析配置文件以及映射文件提供支持,对处理动态SQL语句中的占位符提供支持。

三、Mybatis执行流程

Mybatis执行流程如下图: