什么是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手动配置实体属性与表配置关系来实现。
相关推荐
Listen·Rain2 小时前
用AI开发出一个AI
java·人工智能·spring boot·tomcat·intellij-idea·mybatis·visual studio
马优晨6 小时前
Spring Boot + MyBatis + Redis 整合实战 —— 项目源码深度解析
spring boot·redis·mybatis·mybatis + redis·redis实战·spring实战·mybatis实战
阿里云云原生1 天前
AI Agent 上线容易稳定难?阿里云 AgentLoop 推出“经验自进化”闭环治理方案
人工智能·阿里云·mybatis·agentscope
CodeStats2 天前
【Spring事务】Spring事务注解 @Transactional 完整体系:从 MySQL 隔离级别到 MyBatis 原理详解
java·spring·mybatis·事务·transactional
Nuanyt2 天前
SSM 学习记录 第二部分 Spring整合Mybatis&Junit AOP核心概念 Spring事务管理 SpringMVC 请求与响应 Rest风格
java·spring·junit·mybatis·restful
米码收割机2 天前
【SSM】Spring MVC_MyBatis SSM商城系统(源码+论文)【独一无二】
spring·mvc·mybatis
Devin~Y3 天前
互联网大厂 Java 面试实录:Spring Boot、MyBatis、Redis、Kafka、Spring Security、RAG 与 MCP 全链路问答
java·redis·kafka·mybatis·spring security·spring mvc·sprint boot
VX_bysjlw9854 天前
基于微信小程序的宠物用品商城系统-后端74346-计算机毕设原创(免费领源码+带部署教程)
java·redis·微信小程序·eclipse·mybatis·idea·微信开发者工具
hexu_blog4 天前
springboot3集成shardingsphere4.0 分表分库
java·spring boot·mybatis
乐观的Terry4 天前
9、发布系统-Webhook自动发布
java·spring boot·spring·spring cloud·mybatis