初识 MyBatis 【MyBatis 核心概念】

MyBatis 简介:

MyBatis 是一个优秀的持久层框架,它对JDBC操作数据库的过程进行封装,使开发者只需要关注sql本身,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJO(Plain Ordinary Java Object)映射成数据库中的记录,MyBatis 属于半自动的ORM框架。

MyBatis 使用:

MyBatis 的使用非常简单,在项目的 pom.xml 中引入 MyBatis 依赖即可。

 <dependencies>
        
        <!--mybatis依赖包-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.11</version>
        </dependency>
        
</dependencies>

MyBatis 主要组件

  • Configuration:MyBatis所有的配置信息都维持在 Configuration 对象之中。
  • SqlSessionFactory:Session 工厂。
  • SqlSession:SqlSession 是 MyBatis 的顶层 API,主要负责和数据库的交互,完成数据的增删改查。
  • Executor:Executor 是 MyBatis 的调度核心,负责 SQL 语句的生成和缓存的维护。
  • StatementHandler:StatementHandler 是执行sql语句的核心类,负责创建和管理PreparStatment对象,执行sql语句并处理结果集。
  • ParameterHandler:ParameterHandler 负责将参数转换为 JDBC 所需要的参数,。
  • ResultSetHandler:ResultSetHandler 是处理 sql 语句返回结果集的接口,负责将结果集映射到 Java 对象。
  • TypeHandler:TypeHandler 负责 Java 数据类型和 JDBC 数据类型之间的映射和转换。
  • MappedStatement:MappedStatement 是映射文件中一条sql语句的映射信息,包括sql语句,参数映射信息,结果映射信息等,。
  • SqlSource:SqlSource 负责将传递的 parameterObject 动态的生成为 SQL 语句,并将其封装到 BoundSql 中返回。
  • BoundSql:表示动态生成的SQL语句以及相应的参数信息。

MyBatis 的工作流程

Mybatis 工作流程简图如下:

在这里插入图片描述

下面对每个节点进行简单分析:

  • 读取 MyBatis 配置文件:加载 mybatis-config.xml 文件,加载 MyBatis 的运行环境等。
  • 加载映射文件:映射文件即 mapper.xml 文件,文件中有 SQL 语句,需要在 MyBatis 的配置文件 mybatis-config.xml 中配置。
  • 构造 SqlSessionFactory:通过 MyBatis 配置信息构建 SqlSessionFactory。
  • 创建 SqlSession :通过 SqlSessionFactory 创建 SqlSession 对象,该对象中包含了执行 SQL 语句的所有方法,是一个既可以发送 SQL 执行并返回结果,也可以获取 Mapper 的接口。
  • Executor 执行器:MyBatis 底层定义了一个 Executor 接口来操作数据库,它将根据 SqlSession 传递的参数动态地生成需要执行的 SQL 语句,同时负责查询缓存的维护。
  • StatementHandler:用于封装 JDBC 中的 Statement 操作,即声明 sql、设置参数、执行sql等,执行器中每执行一次 SQL 操作,都会通过 Configuration 构建一个新的 StatementHandler,在 Executor 接口的执行方法中有一个 MappedStatement 类型的参数,该参数是对映射信息的封装,用于存储要映射的 SQL 语句的 id、参数等信息。
  • 输入参数映射:输入参数类型可以是 Map、List 等集合类型,也可以是基本数据类型和 POJO 类型。输入参数映射过程类似于 JDBC 对 preparedStatement 对象设置参数的过程。
  • 输出结果映射:输出结果类型可以是 Map、 List 等集合类型,也可以是基本数据类型和 POJO 类型。输出结果映射过程类似于 JDBC 对结果集的解析过程。

MyBatis 的优缺点

优点:

  • MyBatis 开源免费,社区活跃度高。
  • 与 JDBC 相比减少了大量的代码,例如注册驱动、建立连接、关闭资源等。
  • MyBatis 简单易学,学习成本低。
  • MyBatis 简单灵活,支持各种动态 SQL,且 SQL 文件和业务代码分离,逻辑清晰且提高了代码的重用度。
  • 提供丰富的标签,支持各种映射关系,例如对象和数据库字段的映射、一对一、一对多、多对多等。

缺点:

  • 需要手动编写 SQL,SQL 编写工作量较大(MyBatis -Plus、TK-MyMyBatis 等 MyBatis 增强工具的使用可以减少 SQL 的编写),对开发人员的 SQL 功底有一定的要求。
  • SQL 语句依赖底层数据库,整体可移植性不高。
  • 缓存使用不当,容易产生脏数据,后面会详细介绍 MyBatis 一二级缓存。

总结:本篇简单概括 MyBatis 的概念及一些核心组件,并没有去讲解怎么去使用 MyBatis,大部分小伙伴都有使用过 MyBatis,且有很多文档去讲解怎么使用 MyBatis,感觉再次去讲怎么使用 MyBatis 有些多余 。

欢迎提出建议及对错误的地方指出纠正。

相关推荐

  1. C++概述

    2024-06-06 23:28:03       10 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-06 23:28:03       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-06 23:28:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-06 23:28:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-06 23:28:03       20 阅读

热门阅读

  1. LightDB Pro*C SQLDA介绍

    2024-06-06 23:28:03       10 阅读
  2. Unity中的Surface Effector 2D组件

    2024-06-06 23:28:03       10 阅读
  3. 深度学习之指数移动平均模型(EMA)介绍

    2024-06-06 23:28:03       10 阅读
  4. 遥感图像的深度学习的任务类型

    2024-06-06 23:28:03       10 阅读
  5. 浏览器内置对象 window 用法集锦,看这篇就够了

    2024-06-06 23:28:03       9 阅读
  6. 【POSIX】消息类的格式与使用

    2024-06-06 23:28:03       9 阅读
  7. vue 常用的 UI 框架及表格

    2024-06-06 23:28:03       17 阅读