系列文章目录
前言
回顾一下前面的mybatis,我们讲到输入类型的参数类型
参数类型我们也称作输入映射
而resultType和resultMap也叫作输出映射(可以看前面一篇mybatis)
这里接着讲输出映射resultType和resultMap
而我们的mybatis的核心就是学会配置这两个东西
输入就是前面将的输入参数,这里我们探讨一下返回值,即输出映射
意思就是,返回值,我们既可以写resultType类型,也可以写resultMap类型
二选一,写了resultType就不能写resultMap,同理写了resultMap就不能写resultType
不能同时配置,所以必须要了解他们的使用
注意:类型有很多,但是常用的就是resultType和resultMap
resultType结果返回类型
使用resultType进行结果映射时,查询的列名和映射的pojo属性名完全一致,该列才能映射成功。
如果查询的列名和映射的pojo属性名全部不一致,则不会创建pojo对象;
如果查询的列名和映射的pojo属性名有一个一致,就会创建pojo对象。
翻译成人话就是:数据库里面的对应的表的字段和我们模型model里面的字段是一样的时候就可以用resultType,如果不一致的话就用resultMap
假如其中一个字段不完全一致,那么这个字段就存不到model里面去,其它的完全一致的还是能够存进去的,但是也是有问题的啊,
所以不能这样做
输出简单类型
当输出结果只有一列时,可以使用ResultType指定简单类型作为输出结果类型。
案例:输出一个count(*)
我们跟着来操作一下
然后就可以测试了
首先通过session获取到模型的映射接口拿到userMapper
输出POJO单个对象
这个很容易理解,上面返回int,这里直接返回一个对象就行了,一样的,不再赘述
输出POJO列表
小结
输出单个pojo对象和pojo列表时,mapper映射文件中的resultType的类型是一样的,mapper接口的方法返回值不同。
同样的mapper映射文件,返回单个对象和对象列表时,mapper接口在生成动态代理的时候,会根据返回值的类型,决定调用selectOne方法还是selectList方法。
resultMap结果返回类型
数据库里面的对应的表的字段和我们模型model里面的字段是一样的时候就可以用resultType,如果不一致的话就用resultMap
如果查询出来的列名和属性名不一致,通过定义一个resultMap将列名和pojo属性名之间作一个映射关系。
1、定义resultMap
2、使用resultMap作为statement的输出映射类型
下面看怎么操作
比如我们现在查询的结果的列名跟model里面不一样了,我们就得使用resultMap了
假如有一个字段相同呢
再运行看看
只要有一个字段一直,返回的数据都不会都为空
如果我们非要它全部返回数据怎么做,这就需要resultMap,来进行结果的映射
就这么简单
注意resultMap有一定的容错率,但是也要符合逻辑
比如这样也能查出来
但是一般我们还是规范的写,只是要知道,mybatis也比较智能,能够智能的有一些容错率
总结
数据库里面的对应的表的字段和我们模型model里面的字段完全一致的时候就可以用resultType,
如果不完全一致的话就用resultMap
附加——如果传入是参数是一个包装类怎么使用
mapper接口
对应的映射文件
这样就行
所有的重点就在于 如果传入是参数是一个包装类怎么使用,在映射文件里面的sql里面参数一定要加上具体的类名打点调用
比如这里的#{user.id}