什么是 MyBatis?

文章目录

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

1️⃣ MyBatis 简介

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

📌 MyBatis 主要特点

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

2️⃣ MyBatis vs 传统 JDBC vs Hibernate 📊

特性 JDBC MyBatis Hibernate
开发复杂度 需手写 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 映射文件)

📌 mybatis-config.xml 示例

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 示例

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 的便利性,适用于大多数 企业级应用。

相关推荐
Wang's Blog26 分钟前
Java 项目实战: 交友项目 - 项目:需求分析与滑动数据设计
java·开发语言·交友
前端 贾公子41 分钟前
第 5 章:Codex 从可运行程序到可交付工具
java·前端·数据库
CoderYanger1 小时前
Java EE 进阶:5. Spring IoC&DI(第三弹):Spring DI
java·开发语言·spring boot·spring·面试·java-ee·mvc
Thneonl1 小时前
Claude Code 频繁 Compacting?发布次日我根治了 2 个痛点
后端·rust
一条泥憨鱼1 小时前
【Kafka】零基础学习教程
java·分布式·学习·kafka
Wang's Blog1 小时前
Java 项目实战:交友项目 - 即时通信总结:全链路复盘、可复用清单与自检
java·python·交友
文丑颜不良啊1 小时前
LeetCode1501~1520题目解析
java·leetcode
长不大的杨瑞杰2 小时前
OpenCode v2 LSP 实战:内置语言服务器、自定义配置与诊断闭环
java·人工智能·typescript·lsp·opencode
云和数据.ChenGuang2 小时前
python和java的try
java·开发语言·python
日日大王学编程2 小时前
阿里巴巴开源 Data Agent(Text2SQL)项目全维度详解
java·ai·开源