乐途乐途
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
    • HTTP协议
  • 数据库

    • SQL
    • MySQL 5.7
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON
    • XML
  • 认证与安全

    • JWT
  • 工具

    • Markdown
  • Git

    • GitFlow
  • Quartz

    • Quartz
  • Java

    • MyBatis
    • Spring
    • Spring MVC
    • Maven 入门
    • Maven 进阶
    • Java 设计模式
  • 缓存

    • Redis
联系
阿里云
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
    • HTTP协议
  • 数据库

    • SQL
    • MySQL 5.7
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON
    • XML
  • 认证与安全

    • JWT
  • 工具

    • Markdown
  • Git

    • GitFlow
  • Quartz

    • Quartz
  • Java

    • MyBatis
    • Spring
    • Spring MVC
    • Maven 入门
    • Maven 进阶
    • Java 设计模式
  • 缓存

    • Redis
联系
阿里云
  • 学习路径
  • 第1章 MyBatis概述与快速上手

    • 本章定位
    • MyBatis简介
    • 环境搭建
    • 第一个MyBatis程序
    • SqlSessionFactoryBuilder与openSession重载
    • SqlSessionFactory与SqlSession
    • SqlSession核心方法
    • 不使用 XML 构建 SqlSessionFactory
    • Mapper接口与映射方式
    • Java API 目录结构
  • 第2章 全局配置文件详解

    • 本章定位
    • properties
    • settings
    • typeAliases
    • typeHandlers
    • objectFactory
    • plugins
    • environments
    • transactionManager
    • dataSource
    • databaseIdProvider
    • mappers
    • 日志配置
  • 第3章 SQL映射文件基础

    • 本章定位
    • select
    • insert
    • update
    • delete
    • 参数传递与占位符
    • 主键生成策略
    • resultType
    • resultMap
    • 自动映射详解
    • sql片段
    • SQL 语句构建器
  • 第4章 动态SQL

    • 本章定位
    • if
    • choose、when、otherwise
    • where
    • set
    • foreach
    • trim
    • bind
    • script 元素:在注解映射器中启用动态 SQL
    • _databaseId 与动态 SQL 的多数据库支持
    • 动态 SQL 中插入脚本语言
  • 第5章 结果映射与关联查询

    • 本章定位
    • resultMap详解
    • association
    • collection
    • discriminator
    • N+1查询问题
    • 延迟加载
  • 第6章 MyBatis注解开发

    • 本章定位
    • @Select
    • @Insert
    • @Update
    • @Delete
    • @Param
    • @Options
    • @SelectKey
    • @Results
    • @Result
    • @One
    • @Many
    • @SelectProvider
  • 第7章 缓存与性能优化

    • 本章定位
    • 一级缓存
    • 二级缓存
    • 缓存配置详解
    • 自定义缓存
    • Executor执行器类型
    • 分页插件

"小崔,写SQL映射文件不是写SQL语句那么简单。参数怎么来、结果怎么回、主键怎么拿,每一步都有MyBatis的规矩。"——白歌

本章定位

一句话:本章解决"如何在XML映射文件中编写增删改查、如何传递参数、如何映射结果、如何复用SQL片段"的问题。

飞翔科技的订单模块进入开发高峰,黄俪的前端页面已经就绪,小崔需要把用户、订单、商品的CRUD接口全部落地。白歌要求:所有SQL必须走映射文件,参数必须显式声明,结果映射必须清晰可维护。这一章,小崔把MyBatis的"SQL编写规范"吃透。


学习路线图

学习顺序说明:

  1. 先掌握四大操作标签(select / insert / update / delete)→ 知道MyBatis怎么包装原生SQL
  2. 再学参数传递(参数传递与占位符)→ 知道#{}和${}的区别,防止SQL注入
  3. 再学结果映射(resultType → resultMap → 自动映射详解)→ 从简单到复杂,从自动到手动
  4. 最后学复用与辅助(sql片段 / 主键生成策略 / SQL语句构建器)→ 提升开发效率和代码整洁度

文件关系说明

文件一句话角色
select.md查询入口:最常用标签,掌握id、resultType/resultMap、parameterType
insert.md插入入口:返回影响行数,配合主键生成策略获取自增ID
update.md更新入口:全量更新与增量更新的写法差异
delete.md删除入口:物理删除与逻辑删除的映射文件实践
参数传递与占位符.md安全与灵活:#{}预编译防注入、${}字符串替换用于动态表名/列名
resultType.md简单映射:单表查询、列名与属性名一致时的零配置映射
resultMap.md复杂映射:列名与属性名不一致、嵌套对象、一对多关系的映射基石
自动映射详解.md自动与手动的边界:settings中autoMappingBehavior控制的三档策略
sql片段.md复用机制:抽取公共列名、条件片段,避免重复书写
主键生成策略.md插入闭环:useGeneratedKeys、keyProperty、selectKey处理自增/序列/UUID
SQL语句构建器.md代码辅助:Java API动态拼接SQL,为复杂条件查询提供另一种选择

知识图谱

核心概念关系:

  • select/insert/update/delete 是四大"动作标签",所有业务SQL都挂在它们下面
  • 参数传递 是"输入层",#{}走预编译(安全)、${}走字符串替换(灵活但危险)
  • resultType 是"简单输出层",适合单表、列名与属性名一致;resultMap 是"复杂输出层",解决命名不一致、嵌套、关联
  • sql片段 是"复用层",被多个语句引用,维护一处、全局生效
  • 主键生成策略 是"插入闭环",解决"插完数据后ID怎么回到Java对象"的问题
  • SQL语句构建器 是"代码层替代方案",当XML不够灵活时,用Java代码拼接

与下一章的衔接

本章学完后,小崔能写标准的CRUD,但遇到"根据多个可选条件查询"、"批量插入"、"动态更新"时,XML里写一堆 <if> 判断又丑又难维护。

下一章《动态SQL》将解决:如何用 <if>、<where>、<foreach>、<trim> 等标签,像搭积木一样组装SQL,让映射文件既灵活又整洁。

"静态SQL是基本功,动态SQL才是生产环境的刚需。用户的前端筛选条件,可不会按你的XML格式来。"——黄俪

下一页
select