什么是Mybatis

40 阅读1分钟

一句话
MyBatis 就是“对 JDBC 的轻量级包装框架”——让你写 SQL 保留控制权,却把拼参数、映射结果、缓存、事务等脏活全部代劳。


1. 官方定义

MyBatis is a first class persistence framework with support for custom SQL, stored procedures and advanced mappings.
It eliminates almost all of the JDBC code and manual setting of parameters and retrieval of results.


2. 核心思想(3 个动词)

  1. 写 SQL → XML 或注解,随你。
  2. 配映射 → 列名与属性自动/手动对应。
  3. 调接口 → 只留接口,框架生成实现。

3. 与 JDBC / Hibernate 位置对比

JDBC:      纯手动 → 最灵活、最啰嗦
MyBatis:   半自动 → SQL 自己写,映射它帮你
Hibernate: 全自动 → SQL 都不写,OQL/JPQL 生成

4. 最小可运行模型(无 Spring)

// ① 接口
public interface UserMapper {
    User selectById(long id);
}

// ② SQL
<select id="selectById" resultType="User">
    SELECT id,name,age FROM user WHERE id = #{id}
</select>

// ③ 调用
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
try (SqlSession session = factory.openSession()) {
    UserMapper mapper = session.getMapper(UserMapper.class);
    User u = mapper.selectById(1);
}

全程 0 行 JDBC,0 行 ResultSet 映射


5. 为什么叫“半自动 ORM”

功能谁负责
SQL 语句
参数拼接MyBatis#{ } 预编译)
结果映射MyBatis(自动或 <resultMap>
缓存/事务MyBatis 一级缓存 + 集成 Spring 事务

6. 一句话记住

MyBatis = 保留 SQL 手感,扔掉 JDBC boilerplate;
既享受 ORM 的映射便利,又不放弃 SQL 的细粒度控制。