什么是 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 :支持 ifchooseforeach 等标签,使 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 的便利性,适用于大多数 企业级应用

相关推荐
吧啦吧啦吡叭卜19 分钟前
【打卡d5】快速排序 归并排序
java·算法·排序算法
问道飞鱼20 分钟前
【Springboot知识】开发属于自己的中间件健康监测HealthIndicate
spring boot·后端·中间件·healthindicate
大得36925 分钟前
宝塔docker切换存储目录
java·docker·eureka
东阳马生架构1 小时前
Netty基础—4.NIO的使用简介一
java·网络·netty
luckyext2 小时前
Postman用JSON格式数据发送POST请求及注意事项
java·前端·后端·测试工具·c#·json·postman
程序视点2 小时前
Redis集群机制及一个Redis架构演进实例
java·redis·后端
鱼樱前端2 小时前
Navicat17基础使用
java·后端
黑风风2 小时前
深入理解Spring Boot Starter及如何自定义Starter
java·spring boot·后端
px52133442 小时前
Solder leakage problems and improvement strategies in electronics manufacturing
java·前端·数据库·pcb工艺
uhakadotcom2 小时前
BM25 算法入门与实践
后端