什么是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手动配置实体属性与表配置关系来实现。
相关推荐
2501_9418008815 小时前
Java高性能搜索引擎与Lucene实战分享:大规模文本索引、检索与优化经验
mybatis
q***428218 小时前
SpringCloud-持久层框架MyBatis Plus的使用与原理详解
spring·spring cloud·mybatis
北郭guo20 小时前
MyBatis框架讲解,工作原理、核心内容、如何实现【从浅入深】让你看完这篇文档对于MyBatis的理解更加深入
java·数据库·mybatis
♡喜欢做梦2 天前
MyBatis XML 配置文件:从配置规范到 CRUD 开发实践
xml·java·java-ee·mybatis
q***69772 天前
Spring Boot与MyBatis
spring boot·后端·mybatis
tanxiaomi2 天前
Spring、Spring MVC 和 Spring Boot ,mybatis 相关面试题
java·开发语言·mybatis
q***96583 天前
Spring Boot 集成 MyBatis 全面讲解
spring boot·后端·mybatis
p***93033 天前
Spring Boot中集成MyBatis操作数据库详细教程
数据库·spring boot·mybatis
chxii3 天前
在 MyBatis 中开启 SQL 日志
java·数据库·mybatis
222you3 天前
MyBatis-Plus当中BaseMapper接口的增删查改操作
java·开发语言·mybatis