文章
MyBatis 学习笔记:映射与动态 SQL
牛耕田
暂存笔记,持续补充中。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 等内容。