乐趣区

关于java:Mybatis手撸一Mybatis简介和整体架构

热衷学习,热衷生存!😄

积淀、分享、成长,让本人和别人都能有所播种!😄

一、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 执行流程如下图:

退出移动版