什么是 MyBatis?

embedded/2025/3/16 9:47:57/

文章目录

    • 1️⃣ MyBatis 简介
      • 📌 MyBatis 主要特点
    • 2️⃣ MyBatis vs 传统 JDBC vs Hibernate 📊
    • 3️⃣ MyBatis 核心组件 🏗️
      • 1. SqlSessionFactory
      • 2. SqlSession
      • 3. Mapper(映射器)
    • 4️⃣ MyBatis 配置文件结构 📂
      • 📌 `mybatis-config.xml` 示例
      • 📌 `UserMapper.xml` 示例
    • 5️⃣ MyBatis 的典型使用流程 🔄
    • 6️⃣ 适用场景与总结 🎯

1️⃣ MyBatis 简介

MyBatis 是一款优秀的 持久层框架,用于简化 Java 应用程序与数据库的交互。它提供了一种 基于 SQL 映射 的持久化方案,避免了 JDBC 繁琐的代码,同时比全自动的 ORM 框架(如 Hibernate)更灵活。

📌 MyBatis 主要特点

  • SQL 映射开发者可以手写 SQL,更加灵活,适用于复杂查询。
  • 简化 JDBC:封装了数据库连接、参数设置、结果映射等步骤。
  • 动态 SQL:支持 ifchooseforeach 等标签,使 SQL 更具适应性。
  • 缓存机制:内置一级缓存和可选的二级缓存,提高查询效率。
  • 插件扩展:可自定义拦截器,增强 SQL 执行逻辑。

2️⃣ MyBatis vs 传统 JDBC vs Hibernate 📊

特性JDBCMyBatisHibernate
开发复杂度需手写 SQL,较复杂需手写 SQL,较灵活无需手写 SQL,自动映射
SQL 控制完全手动控制手写 SQL,可动态 SQL由框架生成,难以优化
性能可优化,但代码冗长适中,SQL 直接执行可能存在 N+1 查询问题
缓存机制无内置缓存一级、二级缓存支持一级、二级缓存 + JPA 级联缓存
学习成本低,但需处理大量重复代码适中,需要理解 XML 或注解映射高,需要学习 HQL、映射配置

总结:如果项目对 SQL 有高度控制需求,且查询较复杂,MyBatis 是一个很好的选择。


3️⃣ MyBatis 核心组件 🏗️

1. SqlSessionFactory

  • 作用:创建 SqlSession,管理数据库连接。

  • 示例代码:

    java">InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    

2. SqlSession

  • 作用:执行 SQL 语句,管理事务。

  • 示例代码:

    java">try (SqlSession session = sqlSessionFactory.openSession()) {User user = session.selectOne("com.example.mapper.UserMapper.selectUser", 1);
    }
    

3. Mapper(映射器)

  • 作用:定义 SQL 语句的接口,MyBatis 会动态生成实现类。

  • 示例代码:

    java">public interface UserMapper {@Select("SELECT * FROM users WHERE id = #{id}")User selectUser(int id);
    }
    

4️⃣ MyBatis 配置文件结构 📂

MyBatis 使用 XML 或 Java 代码进行配置,主要包含以下部分:

  • mybatis-config.xml(核心配置)
  • mapper.xml(SQL 映射文件)

mybatisconfigxml__77">📌 mybatis-config.xml 示例

<configuration><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/test"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments>
</configuration>

📌 UserMapper.xml 示例

<mapper namespace="com.example.mapper.UserMapper"><select id="selectUser" resultType="com.example.model.User">SELECT * FROM users WHERE id = #{id}</select>
</mapper>

5️⃣ MyBatis 的典型使用流程 🔄

1️⃣ 加载 MyBatis 配置文件,创建 SqlSessionFactory

2️⃣ 获取 SqlSession,执行 SQL 语句

3️⃣ 使用 Mapper 进行数据库操作

4️⃣ 提交事务(openSession(true) 自动提交)

5️⃣ 关闭 SqlSession,释放资源


6️⃣ 适用场景与总结 🎯

Mybatis适用于:

  • 需要 手写 SQL,优化查询性能的项目
  • 复杂数据库结构,ORM 框架难以满足需求的场景
  • 需要 轻量级持久层框架 的应用

不适用于:

  • 需要全自动 ORM,避免写 SQL 的项目(可以考虑 Hibernate)

🎯 总结:MyBatis 结合了 SQL 的灵活性和 ORM 的便利性,适用于大多数 企业级应用


http://www.ppmy.cn/embedded/173031.html

相关文章

Unity 封装一个依赖于MonoBehaviour的计时器(上) 基本功能

灵感来自下面这本书的协程部分,因此我就自己尝试写了一个 我的新书Unity3D游戏开发&#xff08;第3版&#xff09; | 雨松MOMO程序研究院 如果你不知道什么是协程:unity保姆级教程之协同程序_unity协同-CSDN博客 一句话概括:协程就是单线程的异步操作,其作用于Unity的主线程 1…

5 分钟搭建 Prometheus + Grafana 监控

一.安装 Prometheus cd /usr/local/ wget https://github.com/prometheus/prometheus/releases/download/v2.38.0/prometheus-2.38.0.linux-amd64.tar.gz tar xvf prometheus-2.38.0.linux-amd64.tar.gz ln -s prometheus-2.38.0.linux-amd64 prometheus二.安装 node_exporter…

爬虫逆向:Unicorn 详细使用指南

文章目录 1. Unicorn 介绍1.1 Unicorn 的特点1.2 Unicorn功能2. 安装 Unicorn2.1 安装 Python 绑定2.2 安装 Unicorn 核心库3. Unicorn 的基本使用3.1 初始化模拟器3.2 映射内存3.3 写入代码3.4 设置寄存器3.5 执行代码3.6 读取寄存器4. Unicorn 的高级功能4.1 钩子函数4.2 异常…

使用Python和Keras库实现基于双向门控循环单元(BiGRU)模型进行深度学习序列预测的示例

下面是一个使用Python和Keras库实现基于双向门控循环单元&#xff08;BiGRU&#xff09;模型进行深度学习序列预测的示例。我们将使用一个简单的正弦波时间序列数据来演示该过程。 步骤&#xff1a; 数据生成&#xff1a;生成正弦波时间序列数据。数据预处理&#xff1a;将数…

MAC地址IP地址如何转换?

0. 运维干货分享 软考系统架构设计师三科备考经验附学习资料CKA认证学习资料分享信息安全管理体系&#xff08;ISMS&#xff09;制度模板分享免费文档翻译工具(支持word、pdf、ppt、excel)PuTTY中文版安装包MobaXterm中文版安装包pinginfoview网络诊断工具中文版 在计算机网络…

1.排序算法(学习自用)

1.冒泡排序 算法步骤 相邻的元素之间对比&#xff0c;每次早出最大值或最小值放到最后或前面&#xff0c;所以形象的称为冒泡。 特点 n个数排序则进行n轮&#xff0c;每轮比较n-i次。所以时间复杂度为O(n^2)&#xff0c;空间复杂度为O(1)&#xff0c;该排序算法稳定。 代码…

新手村:统计量均值、中位数、标准差、四分位数

新手村&#xff1a;统计量均值、中位数、标准差、四分位数 统计量定义与讲解 统计量定义计算公式示例说明均值数据集中的所有数值之和除以数值的个数。 Mean ∑ i 1 n x i n \text{Mean} \frac{\sum_{i1}^{n} x_i}{n} Meann∑i1n​xi​​对于数据集 [1, 2, 3, 4, 5]&#x…

【17-3】Twitter评论情绪分类实战

139-Twitter评论情绪基础RNN模型分类 143-LSTM文本分类模型 【参考文档】17-3Twitter评论情绪分类.ipynb 【导出代码】 # %% [markdown] # # 139-Twitter评论情绪分类# %% [markdown] # ## 数据读取处理# %% import torch import torchtext import torch.nn as nn import t…