如果你打开一个 Java 项目的 Mapper 接口,看到方法上没有实现体,却能在 Service 层正常调用并拿到数据库返回的对象,那背后十有八九是 MyBatis 在干活。问题是:真正被问到「#{} 和 ${} 有什么区别」「一级缓存什么时候失效」「动态 SQL 的 trim 标签怎么用」时,很多人答不上来——会用和懂,中间隔着一层。
这份导读不是替你把整套视频看一遍,而是帮你判断:自己到底缺哪一块,该重点看哪几节,看完之后应该能回答出什么问题。
先确认你属于哪种缺口
第一类,写惯了 XML 里的 CRUD,但说不清 MyBatis 的执行流程:SqlSession 怎么创建、Executor 怎么选、StatementHandler 在哪一步介入。这类人面试时最容易被追问到哑火。
第二类,能跑通单表,遇到多表关联、嵌套结果映射、延迟加载就靠复制粘贴。resultMap 的 association 和 collection 写是写了,但不知道为什么这么写。
第三类,项目里用 MyBatis-Plus 或 Spring Boot 整合,注解和 XML 混着用,能跑就行,一旦出现缓存脏读、参数绑定异常、动态 SQL 拼接错误,排查全靠试。
这门课对应的是前两类的补课需求,第三类可以把它当作回头补齐底层原理的参照。至于完全没写过 JDBC、不知道 SQL 映射是什么的,建议先把 JDBC 走一遍再来,否则容易卡在「为什么需要框架」这个前置问题上。
重点该盯住哪几块内容
按 MyBatis 3 的知识结构,值得反复看的通常是这几处:
- 配置与 SqlSessionFactory 的构建过程——搞清楚全局配置文件里每个节点实际影响什么。
- 参数处理机制,包括单个参数、多个参数、@Param 注解、Map 传参的差异,以及 #{} 预编译与 ${} 字符串拼接在 SQL 注入上的本质区别。
- resultMap 的完整用法,尤其是自动映射失效的场景、关联对象与集合的嵌套映射。
- 动态 SQL:if、choose、where、set、foreach、trim 各自的适用边界,以及 where 和 trim 在拼接条件时的取舍。
- 缓存机制,一级缓存的作用范围、二级缓存的开启条件与失效时机。
- 与 Spring 整合后 SqlSession 的生命周期管理,为什么在整合环境下不能手动 close。
这几块不是并列关系。参数处理和动态 SQL 是日常写代码用得最多的,缓存和整合属于面试与排错高频区,映射部分则决定了你能不能从单表顺利过渡到真实业务表结构。
配套练习怎么做才有效
看视频最容易产生的错觉是「听懂了等于会写」。建议每看完一个知识点,关掉视频自己动手:
- 建一张主表和一张从表,用 resultMap 把一对多关系映射出来,不用注解,纯 XML。
- 写一个带多条件筛选的查询,要求用动态 SQL 实现,且所有参数走 #{}。
- 手动触发一次一级缓存的命中与失效,用日志确认 SQL 只发了一次或发了两次。
- 把同一个查询分别用 XML 和注解实现,比较两者在复杂 SQL 下的可维护性差异。
这些练习不需要完整项目支撑,一张表两三条数据就够。做完再回头对照视频里讲的内容,缺口会自己浮出来。
看完应该能回答的问题
用这几个问题自检,答得利索说明这一轮没白看:
- MyBatis 中 #{} 和 ${} 分别对应 JDBC 的哪一步操作,什么场景下不得不用 ${},用的时候怎么防注入?
- resultMap 里的 association 和 collection 分别对应什么关系,嵌套查询和嵌套结果两种写法各有什么代价?
- 一级缓存默认在什么范围内生效,执行哪种操作会让它清空?
- 动态 SQL 中 where 标签和 trim 标签解决的是同一个问题吗?
- MyBatis 与 Spring 整合后,SqlSession 由谁负责关闭,手动关闭会带来什么后果?
如果这些问题你只能答出一半,说明基础映射和参数处理已经过关,但缓存与整合部分还需要再走一遍。MyBatis 的知识点不算多,难点在于它们互相咬合——参数绑定影响动态 SQL 的写法,缓存策略影响你对查询结果的预期,映射方式决定了你能否优雅处理复杂表结构。带着上面这些具体问题去看,比从头顺着播一遍要省时间。
MyBatis 3从入门到提高视频教程-走进MyBatis世界百度网盘下载
课程推荐
《MyBatis 3从入门到提高视频教程-走进MyBatis世界》MyBatis 3从入门到提高视频教程-走进MyBatis世界百度网盘下载【技能收获】学完可掌握:核心实战技能、项目驱动学习。课程以实战为导向,覆盖从基础概念到完整项目落地的关键步骤,配套章节笔记便于课后复盘与面试前快速回顾。【学习建议】建议按目录顺序学习,先打基础再进入综合实战章节;每完成 2~3 节可结合笔记整理一份学习小结,最终尝试独立复现一套完整 Demo 写入个人作品集。【就业发展】可面向岗位:Linux 运维工程师、SRE、云计算工程师、DevOps 工程师。云原生与自动化运维仍是企业 IT 刚需方向,认证 + 实战项目组合能显著提升面试通过率,适合向中高级运维或架构岗进阶。 若你已有一定编程或运维基础,本课程可帮助你在现有技能栈上快速叠加热门方向能力,提升求职时的项目说服力与薪资谈判空间。
视频目录(57 节)
* 1-1 [肖凡] MyBatis入门(1) MyBatis简介及添加数据.mp4
* 1-2 [肖凡] MyBatis入门(2) MyBatis删除.mp4
* 1-3 [肖凡] MyBatis入门(3) MyBatis查询及别名.mp4
* 1-4 [肖凡] MyBatis入门(4) resultMap配置.mp4
* 1-5 [肖凡] MyBatis入门(5) MyBatis修改.mp4
* 1-6 [肖凡] MyBatis入门(6) MyBatis接口.mp4
* 1-7 [肖凡] MyBatis入门(7) MyBatis接口使用.mp4
* 2-1 [肖凡] MyBatis与Spring集成(1) SqlSessionFactory配置.mp4
* 2-2 [肖凡] MyBatis与Spring集成(2) SqlSessionTemplate的使用.mp4
* 2-3 [肖凡] MyBatis与Spring集成(3) 注入SqlSessionTemplate.mp4
* 2-4 [肖凡] MyBatis与Spring集成(4) SqlSessionDaoSupport类应用.mp4
* 2-5 [肖凡] MyBatis与Spring集成(5) 通用初始化方法编写.mp4
* 2-6 [肖凡] MyBatis与Spring集成(6) MapperFactoryBean使用.mp4
* 2-7 [肖凡] MyBatis与Spring集成(7) Spring的bean继承机制.mp4
* 2-8 [肖凡] MyBatis与Spring集成(8) MapperScannerConfigurer配置.mp4
* 2-9 [肖凡] MyBatis与Spring集成(9) 映射器命名和装配.mp4
* 2-10 [肖凡] MyBatis与Spring集成(10) 映射器过滤.mp4
* 2-11 [肖凡] MyBatis与Spring集成(11) 外部数据库连接配置引用.mp4
* 2-12 [肖凡] MyBatis与Spring集成(12) mybatis-scan元素.mp4
* 2-13 [肖凡] MyBatis与Spring集成(13) @MapperScan注解.mp4
* 2-14 [肖凡] MyBatis与Spring集成(14) @MapperScan注解.mp4
* 2-15 [肖凡] MyBatis与Spring集成(15) @MapperScan注解.mp4
* 2-16 [肖凡] MyBatis与Spring集成(16) 事务基础.mp4
* 2-17 [肖凡] MyBatis与Spring集成(17) JDBC对事务的支持.mp4
* 2-18 [肖凡] MyBatis与Spring集成(18) JDBC事务编程.mp4
* 2-19 [肖凡] MyBatis与Spring集成(19) Spring事务管理抽象.mp4
* 2-20 [肖凡] MyBatis与Spring集成(20) Spring事务管理.mp4
* 2-21 [肖凡] MyBatis与Spring集成(21) TransactionTemplate用法.mp4
* 2-22 [肖凡] MyBatis与Spring集成(22) 声明式事务管理.mp4
* 2-23 [肖凡] MyBatis与Spring集成(23) 声明式事务管理之XML方式.mp4
* 2-24 [肖凡] MyBatis与Spring集成(24) execution切点函数.mp4
* 2-25 [肖凡] MyBatis与Spring集成(25) execution切点函数.mp4
* 2-26 [肖凡] MyBatis与Spring集成(26) 声明式事务管理之注解方式.mp4
* 2-27 [肖凡] MyBatis与Spring集成(27) @Transactional注解.mp4
* 2-28 [肖凡] MyBatis与Spring集成(28) Spring AOP代理机制.mp4
* 3-1 [肖凡] MyBatis association映射(1) 嵌套的结果映射.mp4
* 3-2 [肖凡] MyBatis association映射(2) 嵌套的select查询.mp4
* 4-1 [肖凡] 第四章:MyBatis collection映射(1) 嵌套的结果映射.mp4
* 4-2 [肖凡] 第四章:MyBatis collection映射(2) 嵌套的select查询.mp4
* 5-1 [肖凡] MyBatis参数传递的几种方式(1) 简介及默认命名方式.mp4
* 5-2 [肖凡] MyBatis参数传递的几种方式(2) 注解命名方式.mp4
* 5-3 [肖凡] MyBatis参数传递的几种方式(3) Map方式.mp4
* 5-4 [肖凡] MyBatis参数传递的几种方式(4) 混合方式.mp4
* 5-5 [肖凡] MyBatis参数传递的几种方式(5) #{…}与${…}的区别.mp4
* 6-1 [肖凡] MyBatis日志配置之Log4j2方式 使用Log4j2配置日志.mp4
* 7-1 [肖凡] 动态SQL(1) if和choose元素.mp4
* 7-2 [肖凡] 动态SQL(2) where、set及trim元素.mp4
* 7-3 [肖凡] 动态SQL(3) foreach元素.mp4
* 8-1 [肖凡] MyBatis一对多双向关联(1) 保存关联.mp4
* 8-2 [肖凡] MyBatis一对多双向关联(2) 删除关联.mp4
* 9-1 [肖凡] MyBatis Generator 命令行方式运行MyBatis Generator.mp4
* 10-1 [肖凡] MyBatis多对多双向关联(1) 保存关联.mp4
* 10-2 [肖凡] MyBatis多对多双向关联(2) 保存关联.mp4
* 10-3 [肖凡] MyBatis多对多双向关联(3) 关联查询.mp4
* 10-4 [肖凡] MyBatis多对多双向关联(4) 关联查询.mp4
* 10-5 [肖凡] MyBatis多对多双向关联(5) 关联查询应用.mp4
* 10-6 [肖凡] MyBatis多对多双向关联(6) 删除关联.mp4
配套笔记(1 份 PDF)
* 1-8 MyBatis入门测试.pdf






