文章
MyBatis 学习笔记:映射与动态 SQL
更新于 2026/09/20牛耕田
暂存笔记,持续补充中。MyBatis 是 Java 后端最常用的 ORM 半自动框架。
一、定位#
- MyBatis 是半自动 ORM:SQL 由开发者手写,框架只负责参数绑定 + 结果映射。
- 相比全自动(JPA/Hibernate),更灵活、可控,适合复杂 SQL 场景。
二、核心组件#
| 组件 | 作用 |
|---|---|
SqlSessionFactory | 全局唯一,生产 SqlSession |
SqlSession | 一次会话,执行 SQL |
Mapper 接口 | 通过动态代理绑定 XML/注解的 SQL |
Executor | 真正执行 SQL 的执行器 |
三、参数与结果映射#
- 单个参数:
#{id}直接取值;多个参数用@Param或Map。 #{}是预编译占位符(防注入),${}是字符串拼接(危险,尽量不用)。- 结果映射:
resultType(简单类型)或resultMap(复杂、字段名不一致时)。
<select id="findByName" resultType="User"> SELECT id, name, age FROM user WHERE name = #{name}</select>四、动态 SQL#
| 标签 | 用途 |
|---|---|
<if> | 条件判断 |
<where> | 自动处理 AND/OR 前缀 |
<foreach> | 遍历集合,常用于 IN |
<set> | 更新时自动处理逗号 |
<choose>/<when>/<otherwise> | 类似 switch |
<select id="query" resultType="User"> SELECT * FROM user <where> <if test="name != null and name != ''">AND name = #{name}</if> <if test="age != null">AND age = #{age}</if> </where></select>五、缓存#
- 一级缓存:
SqlSession级别,默认开启。 - 二级缓存:
namespace级别,需手动开启,跨会话共享,注意脏读与序列化。
六、与 Spring Boot 整合#
用 mybatis-spring-boot-starter,配 @MapperScan 扫描 Mapper 接口;复杂 SQL 用 XML,简单查询可用注解 @Select。
本文为暂存笔记,后续补充分页插件 PageHelper 等内容。