💾 MyBatis 学习

半自动 ORM 框架 - SQL 与 Java 对象的映射

📊 MyBatis vs JPA 对比

MyBatis

优点:

  • ✅ SQL 灵活可控
  • ✅ 性能优化方便
  • ✅ 复杂查询友好
  • ✅ 易于 DBA 协作

缺点:

  • ❌ SQL 与代码耦合
  • ❌ 数据库迁移成本高
  • ❌ 需要手写 SQL

适用:复杂查询、性能要求高

JPA/Hibernate

优点:

  • ✅ 面向对象
  • ✅ 数据库无关
  • ✅ 开发效率高
  • ✅ 自动维护

缺点:

  • ❌ 复杂查询困难
  • ❌ 性能调优复杂
  • ❌ 学习曲线陡

适用:标准 CRUD、快速开发

🚀 快速体验

💡 缓存机制

一级缓存 (SqlSession 级别)

默认开启,同一 SqlSession 内相同查询只执行一次 SQL

// 第一次查询 - 执行 SQL
User u1 = mapper.findById(1L);
// 第二次查询 - 命中缓存,不执行 SQL
User u2 = mapper.findById(1L);

二级缓存 (Mapper 级别)

需配置 @CacheNamespace,多个 SqlSession 共享

@Mapper
@CacheNamespace
public interface UserMapper { ... }

💡 验证方式:查看控制台 SQL 日志,缓存命中时不打印 SQL

📝 常用注解

注解用途
@Mapper标记为 MyBatis Mapper 接口
@Select查询 SQL
@Insert插入 SQL
@Update更新 SQL
@Delete删除 SQL
@Param参数命名
@Options额外选项(如返回自增ID)
@CacheNamespace启用二级缓存

🔧 动态 SQL 示例

<select id="findUsers">
SELECT * FROM users
<where>
<if test="name != null">
AND name LIKE CONCAT('%', #{name}, '%')
</if>
<if test="email != null">
AND email = #{email}
</if>
</where>
</select>