浅入浅出Mybatis:(一)Mybatis架构总览

文章目录

  • 前言
  • 准备工作
  • MyBatis项目结构
    • MyBatis3:
    • Mybatis-spring:
  • 核心关注点
  • 结语

前言

说到MyBatis,如果您是Java开发者,对于其一定不陌生,MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

在互联网应用开发中,对于持久层框架的选择,MyBatis是大多数情况下首先考虑被选择的框架,它凭借着使用简单、性能良好等优点,从诸多持久层框架中脱颖而出,那么,关于MyBatis背后的实现原理,你是否有过深入了解呢?

本系列文章,就带您深入探析MyBatis的实现原理,从源码层面来一起理解MyBatis。

准备工作

本系列文章采用MyBatis 3.4.6版本,MyBatis项目GitHub地址:https://github.com/mybatis/mybatis-3/tree/3.4.x

我们在使用MyBatis时,基本上都会与Spring集成使用,因此需要mybatis-spring集成的项目,mybatis-spring项目GitHub地址:https://github.com/mybatis/spring

根据我个人学习开源项目的经验,学习源码的过程最好还是要自己下载项目源码,可以跟着笔者的思路一起走,避免纸上谈兵,因此建议您先下载MyBatis的项目源代码。

MyBatis项目结构

MyBatis3:

我们首先来对MyBatis3的项目结构进行一个大体的概览,首先来看Mybatis3项目:

浅入浅出Mybatis:(一)Mybatis架构总览_第1张图片

如上图所示,MyBatis的项目结构非常的清晰,其复杂度相对于Spring项目,也是简单明了很多,我们对其中几个重要的目录进行简要的介绍。

1、annotations:存放MyBatis注解,包括最为常用的注解@Mapper@Param@Insert等。

2、binding:存放MapperProxyMapperRegistry,可能现在你对这两个类不太熟悉,在后面的章节中,我们会重点介绍这两个类,它们是组装Mapper InterfaceMapper xml配置文件映射关系的核心类。

3、builder:存在构造器类,项目中用到的大量核心对象是基于构造器来构建出来的。

4、cache:存放MyBatis的一级缓存实现。

5、datasource:存放数据库连接实现。

6、executor:存放各种执行器,是MyBatis的核心实现,SQL的具体执行就是在执行器中进行执行的。

7、io:存放I/O操作工具类,用于读取Mapper xml配置文件。

8、logging:存放各种日志输出实现,可以适配多种日志类库,例如log4jlog4j2JDK stdout等。

9、mapping:存放处理映射关系类,即如何将Mapper xml配置文件中的配置与Java类进行关系映射,查询结果如何与Java类型进行映射。

10、parsing:存放xml配置文件解析工具类。

11、plugin:存放MyBatis插件的主键以及配置,但具体的插件实现,并不在此处。

12、session:存放SqlSessionFactory等相关类,是MyBatis的核心实现所在。

13、transaction:存放事务控制相关类。

Mybatis-spring:

在实际开发中,我们使用MyBatis大多是与Spring项目配合使用,MyBatis开发了独立的项目,来与Spring进行集成,mybatis-spring项目的目录结构大体如下:

浅入浅出Mybatis:(一)Mybatis架构总览_第2张图片

mybatis-spring的项目目录结构如上,目录结构相对简单,我就不一一介绍了,比较重点关注的有两个类:MapperScannerRegistrarSqlSessionTemplate,后续的章节中我们也会重点介绍。

核心关注点

我们在项目中使用MyBatis的时候,配置非常简单,配置一个xml的配置文件与Mapper Interface进行映射,然后直接@Autowired,就可以使用了,像这样:

mapper注入示例

那么这里就会引申出几个问题:

1、为什么仅仅注入了一个interface,并没有对应的实现,也可以正常执行呢?

2、我配置的xml配置文件是怎么与mapper interface关联起来的呢?

3、Spring是如何找到我的mapper interfacexml配置文件的呢?

4、一个简单的select操作,是怎么执行的呢?

从源码角度看:

1、MyBatis使用了哪些设计模式?

2、MyBatis如何做到出色的执行性能?

3、MyBatis的设计有哪些我们可以参考借鉴的地方?

接下来的系列文章中,我们就对上面的几个问题,进行详细的解读,一起来探究MyBatis的核心工作原理。

结语

本篇,我们简单介绍了MyBatis的项目目录结构以及系列文章要去探究的问题点,接下来的文章中,我们会对MyBatis的核心源代码进行深入剖析,让您做到知其然,也知其所以然,敬请期待!




更多精彩文章, 请关注我的个人公众号:老宣说
让我们一起共同学习成长!
感谢您的支持!
老宣说公众号地址

你可能感兴趣的:(浅入浅出MyBatis,mybatis,源码分析,mybatis实现)