文章目录
- 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:支持
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
,管理数据库连接。 -
示例代码:
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
2. SqlSession
-
作用:执行 SQL 语句,管理事务。
-
示例代码:
try (SqlSession session = sqlSessionFactory.openSession()) {User user = session.selectOne("com.example.mapper.UserMapper.selectUser", 1); }
3. Mapper(映射器)
-
作用:定义 SQL 语句的接口,MyBatis 会动态生成实现类。
-
示例代码:
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
示例
<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 的便利性,适用于大多数 企业级应用。