Mybatis(三) 映射文件详解
前面说了全局配置文件中内容的详解,大家应该清楚了,现在来说说这映射文件,这章就对输入映射、输出映射、动态 sql 这几个知识点进行说明,其中高级映射 (一对一,一对多,多对多映射) 在下一章进行说明。
一、输入映射
输入映射:配置 statement 中输入参数的类型。有四种
1.1、传递简单类型,八大基本类型,比如 int 类型
findUserById: 根据 id 进行查询对应 user,那么传入的就应该是 int 类型的值。所以使用别名 int 来映射传入的值
1.2、传递 pojo(代表正常的对象,比如 user 的 javabean 对象)
insertUser: 就是传递的 User 这个对象。
注意:在使用 pojo 之后,#{xxx}。 xxx 表示 pojo 对象中的属性名。
1.3、传递包装 pojo(其中放置的为集合,对象引用等)
什么是包装 pojo?比如
queryUserList
注意:user.username 这个属性的获取,因为 UserQueryVO 是一个包装 pojo,其中有 user 的引用。而 user 中又有 username 的属性,那么这样一层层取过来用即可。
1.4、传递 hashmap
这个也很简单,理解了前面的,这个不难。
注意:hashmap 使用的是别名,mybatis 中内置了。
二、输出映射
讲解两个东西。resultType 和 resultMap
2.1、resultType
这个没什么好讲解的,也就是查询出来的结果的列名需要对应我们编写的输出映射类型中的属性名,如果不匹配,则不能完成映射,那么查询出来的结果也不能如愿的放入对应的对象中去。这个很正常,我们都知道。
2.2、resultMap
查询出来的结果的列名不用对应我们编写的输出映射类型中的属性名,也能够完成映射。此时就需要 resultMap 来做这个事情了,使用一个案例来说明
案例 1.:查询的 sql 语句使用了别名,如何将其与对应的对象的属性进行映射?使用 resultMap 来完成
分析:看懂了吗?其实就是通过 resultMap 这个中介,来帮我们完成映射,本来是不能够成功映射的,因为属性名和列名不同,但是中间有了 resultMap 帮我们完成这个映射。就可以达到这种效果了,不过使用 resultMap 是比 resultType 更为繁琐一点,但是也有其优点,在进行高级映射时,更多的是使用 resultMap,这里只是先体验一下 resutlMap 的基本用法,在下一章讲解高级映射时,会深化讲解 resultMap 的用法。
三、动态 sql
这是个很有趣的东西,个人感觉挺好的。
通过 Mybatis 提供的各种动态标签实现动态拼接 sql,使得 mapper 映射文件在编写 SQL 时更加灵活,方便。常用动态 SQL 标签有:if、where、foreach
3.1、if 和 where
if 标签用来判断
里面有 test 属性,可以输入判断语句
where 标签,处理条件是否输入正确。如果没有条件,就把自己干掉,
具体使用代码来看看
3.2、foreach
注意:foreach 中的 open 和 close 这两个属性,open: 在遍历之前将创建该字符串,一直遍历,遍历结束后,将 close 中的内容拼接上去。
3.3、sql 片段
通俗点讲,就是对动态 sql 的重用,将写好的动态 sql 提取出来,然后在需要的地方进行调用。
Sql 片段要先定义后使用
四、总结
这章节也很简单,具体又认识了一下映射文件中的一些配置,最主要是接触到了两个新的东西,输出映射的 resultMap 和动态 sql。其中 resultMap 并没有讲全,只是介绍了一下他的作用及最简单的用法,具体的会在下一章节讲解到。也就是高级映射。