文章

MyBatis 学习笔记:映射与动态 SQL

牛耕田

暂存笔记,持续补充中。MyBatis 是 Java 后端最常用的 ORM 半自动框架。

一、定位

  • MyBatis 是半自动 ORM:SQL 由开发者手写,框架只负责参数绑定 + 结果映射。
  • 相比全自动(JPA/Hibernate),更灵活、可控,适合复杂 SQL 场景。

二、核心组件

组件 作用
SqlSessionFactory 全局唯一,生产 SqlSession
SqlSession 一次会话,执行 SQL
Mapper 接口 通过动态代理绑定 XML/注解的 SQL
Executor 真正执行 SQL 的执行器

三、参数与结果映射

  • 单个参数:#{id} 直接取值;多个参数用 @ParamMap
  • #{}预编译占位符(防注入),${}字符串拼接(危险,尽量不用)。
  • 结果映射: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 等内容。