什么是MyBatis

MyBatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。以下是关于MyBatis的详细介绍:

一、MyBatis的起源与发展

  • MyBatis本是Apache的一个开源项目iBATIS,2010年这个项目由Apache迁移到了Google Code,并且改名为MyBatis。2013年11月迁移到Github。
  • 当前,最新版本是MyBatis 3.5.13,发布时间是2023年03月11日。

二、MyBatis的功能特点

  • 简单易学:MyBatis本身很小且简单,没有任何第三方依赖。最简单的安装只需两个jar文件,并配置几个SQL映射文件。它易于学习、易于使用,通过文档和源代码,开发者可以比较全面地掌握其设计思路和实现。
  • 灵活:MyBatis不会对应用程序或者数据库的现有设计强加任何影响。SQL写在XML里,便于统一管理和优化。
  • 解除SQL与程序代码的耦合:MyBatis通过提供DAO(数据访问对象)层,将业务逻辑和数据访问逻辑分离,使得系统的设计更清晰、更易维护、更易进行单元测试。
  • 支持对象与数据库的ORM字段关系映射:MyBatis提供映射标签,支持对象关系映射(ORM),方便Java对象与数据库记录之间的转换。
  • 支持动态SQL:MyBatis提供XML标签,支持编写动态SQL,使得SQL语句更加灵活、可配置。

三、MyBatis的核心组件与流程

MyBatis架构分为三层:

  • API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层接收到调用请求后,会调用数据处理层来完成具体的数据处理。
  • 数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它的主要目的是根据调用的请求完成一次数据库操作。
  • 基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理等。这些都是共用的组件,为上层的数据处理层提供最基础的支撑。

MyBatis的执行流程如下:

  1. 加载配置并初始化:触发条件为加载配置文件。处理过程是将SQL的配置信息加载成为一个个MappedStatement对象(包括传入参数映射配置、执行的SQL语句、结果映射配置),并存储在内存中。

  2. 接收调用请求:触发条件为调用MyBatis提供的API。传入参数为SQL的ID和传入参数对象。处理过程是将请求传递给下层的请求处理层进行处理。

  3. 处理操作请求:触发条件为API接口层传递请求过来。传入参数为SQL的ID和传入参数对象。具体处理步骤包括:

    • 根据SQL的ID查找对应的MappedStatement对象。
    • 根据传入参数对象解析MappedStatement对象,得到最终要执行的SQL和执行传入参数。
    • 获取数据库连接,根据得到的最终SQL语句和执行传入参数到数据库执行,并得到执行结果。
    • 根据MappedStatement对象中的结果映射配置对得到的执行结果进行转换处理,并得到最终的处理结果。
    • 释放连接资源。
  4. 返回处理结果:将最终的处理结果返回。

四、MyBatis的配置与使用

  • 导入依赖:使用MyBatis需要导入MyBatis和数据库(如MySQL)的依赖。
  • 配置yml或xml文件:配置数据库连接信息、MyBatis的相关设置等。
  • 创建Mapper接口:定义数据访问方法。
  • 创建Mapper XML文件:编写SQL语句,并与Mapper接口中的方法绑定。
  • 使用SqlSession进行操作:通过SqlSession获取Mapper接口的代理实现类,并调用其方法进行数据库操作。

五、MyBatis的高级特性

  • 一级缓存:存储在SqlSession中,默认开启。第一次查询时会先去缓存中查找,若找到则直接返回;若没找到则去数据库获取,返回查询结果并缓存。事务提交操作会清空缓存。
  • 二级缓存:构建在一级缓存之上。在收到查询请求时,MyBatis会首先查询二级缓存;若二级缓存未命中,再去查询一级缓存;若一级缓存也没有,则查询数据库。二级缓存与具体的命名空间绑定,一个Mapper中有一个Cache,相同Mapper中的MappedStatement共用一个Cache。
  • 延迟加载:MyBatis支持延迟加载,即只有在真正需要数据时才从数据库中加载,这有助于提高性能。
  • 复杂映射:MyBatis支持复杂映射,包括一对一、一对多、多对多等关系映射。这可以通过resultMap手动配置实体属性与表配置关系来实现。
相关推荐
KKTT013 小时前
Mybatis——(2)
java·spring·mybatis
胡图蛋.6 小时前
MyBatisPlus实现多表查询
mybatis
阿岳31615 小时前
MyBatis写法汇总
mybatis
夏之月唤风21 小时前
SpringBoot增删改查导入导出操作【模板】
java·spring boot·后端·mysql·mybatis
CYX_cheng1 天前
#{ }和${ } 、参数处理
mybatis
A尘埃1 天前
项目中常见的Mapper文件和接口
数据库·mybatis
@ 李青龙1 天前
MybatisPlus--mybatis升级版
mybatis·mybatisplus
羽愿1 天前
Mybatis
数据库·oracle·mybatis
棐木1 天前
Mybatis使用xml及纯注解实现增删改查操作
xml·mybatis·mybatis的纯注解开发