前言
上节我们介绍了 《 Mybatis系列全解(四):全网最全!Mybatis配置文件 XML 全貌详解 》,内容很详细( 也很枯燥),由于篇幅实在过于冗长,我预计大家想看完得花上两段上班地铁公交车的时间 。。。
![dd9fd79a0c5e225cde4148d8f6581a0b.png](https://i-blog.csdnimg.cn/blog_migrate/0bcb1a0fdf7cc4abaa4b06988157ca40.jpeg)
不过应该有让大家了解到 Mybatis 的核心配置文件 config.xml 全貌,其中的 元素即是我们本节准备登场介绍的 SQL 映射器,上节有介绍了三种引入 SQL 映射器的方式,本节我们就主要聊聊它的几个顶级元素用法。
Mybatis 真正强大就在于它的语句映射,这是它的魔力所在,也是基石。由于它异常强大,映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码( 95% 是Mybatis 官网的说法 ,我也就引入一下 ),MyBatis 致力于减少使用成本,让用户能更专注于 SQL 代码。
一、mapper 映射器顶级元素全貌
与其它 ORM 框架如 Hibernate 不同,Mybatis 的框架思想希望开发者能够直接操作数据库编写 SQL,而不是隐藏起来,让开发者独自面对 Java 对象,为此 Mybatis 设计了 SQL 映射器,任你五招十二式。
![ad3664242c4ac4b63fc7f589247d03c1.png](https://i-blog.csdnimg.cn/blog_migrate/f0586100cc8f253483b5776db0401b5c.jpeg)
映射器有九大顶级元素 ,基本技能介绍
- select : 用于查询,支持传参,返回指定结果集;
- insert : 用于新增,支持传参,返回指定结果集;
- update : 用于更新,支持传参,返回指定结果集;
- delete : 用于删除,支持传参,返回指定结果集;
- sql : 被其它语句引用的 可复用 语句块;
- cache : 当前命名空间缓存配置;
- cache-ref : 引用其它命名空间的缓存配置;
- parameterMap : 参数映射,已弃用,是它不够好;
- resultMap : 结果集映射,它就很好;
其中,增删改查操作拼接 SQL 时使用到的 动态SQL( if、where、foreach啥的),以及封装结果集时使用到的 复杂映射 (1对1 ,1对多,多对多啥的),这两部分我们后面单立文章再详细介绍,本文中我们简单点过。
九大顶级元素 ,功能归类:
其中顶一元素 parameterMap 已建议弃用了 。
![e5b64882a8368d9b09eddee0a548c8f3.png](https://i-blog.csdnimg.cn/blog_migrate/a61362eaaff34a49bcb429ec13484e28.jpeg)
无论你有多么复杂的 SQL 操作,最根本的思路都逃不出以上 4 部分。
二、namespace 命名空间
一个完整的 Mapper 映射文件,需要有约束头 xml 与 !DOCTYPE ,其次才是 mapper 根元素,最后再是顶级元素,而其中,namespace 属性作为 mapper 的唯一标识,试回忆:
- 上学时,6年级一班23号,能代表唯一的你。
- 编写 Java 类时,包名 + 类名,能代表唯一的类。
- 而如今,我们在 Mybatis 中写的每一段 SQL 语句,同样有唯一的代表方式,那就是「 命名空间标识 + 语句id 」,无论是为了区分业务也好,还是为了拆分服务也好,反正 Mybatis 让每一个 mapper.xml 配备一个唯一命名空间标识。
![c9263fe5ff03cf60d9a2b4a652c1f8de.png](https://i-blog.csdnimg.cn/blog_migrate/720b56cd2855333c808b67820428e8d1.jpeg)
每一段 SQL 语句都是唯一定义的,我们在 Mybatis 中用「 命名空间标识 + 语句块 ID 」作为唯一的标识,组合之后在 Mybatis 二级缓存中可以作为本地 map 集合 缓存 的唯一Key ,也可以用于 Dao 接口的 映射 绑定,还能作为唯一 代理 标识。总之,我们希望避免命名冲突和重复定义,所以,拥有这么一个唯一标识 ,它就至少有一亿个利好。