0
点赞
收藏
分享

微信扫一扫

SSM之MyBatis_02_01_resultType结果返回类型和resultMap结果返回类型——输出映射、如果传入是参数是一个包装类怎么使用


系列文章目录

文章目录

  • 系列文章目录
  • 前言
  • resultType结果返回类型
  • 输出简单类型
  • 输出POJO单个对象
  • 输出POJO列表
  • 小结
  • resultMap结果返回类型
  • 总结
  • 附加——如果传入是参数是一个包装类怎么使用

前言

回顾一下前面的mybatis,我们讲到输入类型的参数类型

参数类型我们也称作输入映射

而resultType和resultMap也叫作输出映射(可以看前面一篇mybatis)

这里接着讲输出映射resultType和resultMap

SSM之MyBatis_02_01_resultType结果返回类型和resultMap结果返回类型——输出映射、如果传入是参数是一个包装类怎么使用_resultMap


SSM之MyBatis_02_01_resultType结果返回类型和resultMap结果返回类型——输出映射、如果传入是参数是一个包装类怎么使用_包装类_02


而我们的mybatis的核心就是学会配置这两个东西

SSM之MyBatis_02_01_resultType结果返回类型和resultMap结果返回类型——输出映射、如果传入是参数是一个包装类怎么使用_resultType_03


输入就是前面将的输入参数,这里我们探讨一下返回值,即输出映射

意思就是,返回值,我们既可以写resultType类型,也可以写resultMap类型

二选一,写了resultType就不能写resultMap,同理写了resultMap就不能写resultType

不能同时配置,所以必须要了解他们的使用

注意:类型有很多,但是常用的就是resultType和resultMap

resultType结果返回类型

使用resultType进行结果映射时,查询的列名和映射的pojo属性名完全一致,该列才能映射成功。

如果查询的列名和映射的pojo属性名全部不一致,则不会创建pojo对象;

如果查询的列名和映射的pojo属性名有一个一致,就会创建pojo对象。

翻译成人话就是:数据库里面的对应的表的字段和我们模型model里面的字段是一样的时候就可以用resultType,如果不一致的话就用resultMap

SSM之MyBatis_02_01_resultType结果返回类型和resultMap结果返回类型——输出映射、如果传入是参数是一个包装类怎么使用_resultMap_04


SSM之MyBatis_02_01_resultType结果返回类型和resultMap结果返回类型——输出映射、如果传入是参数是一个包装类怎么使用_映射文件_05


假如其中一个字段不完全一致,那么这个字段就存不到model里面去,其它的完全一致的还是能够存进去的,但是也是有问题的啊,

所以不能这样做

输出简单类型

当输出结果只有一列时,可以使用ResultType指定简单类型作为输出结果类型。

案例:输出一个count(*)

SSM之MyBatis_02_01_resultType结果返回类型和resultMap结果返回类型——输出映射、如果传入是参数是一个包装类怎么使用_字段_06


SSM之MyBatis_02_01_resultType结果返回类型和resultMap结果返回类型——输出映射、如果传入是参数是一个包装类怎么使用_resultType_07


我们跟着来操作一下

SSM之MyBatis_02_01_resultType结果返回类型和resultMap结果返回类型——输出映射、如果传入是参数是一个包装类怎么使用_包装类_08


SSM之MyBatis_02_01_resultType结果返回类型和resultMap结果返回类型——输出映射、如果传入是参数是一个包装类怎么使用_字段_09


然后就可以测试了

SSM之MyBatis_02_01_resultType结果返回类型和resultMap结果返回类型——输出映射、如果传入是参数是一个包装类怎么使用_包装类_10


首先通过session获取到模型的映射接口拿到userMapper

SSM之MyBatis_02_01_resultType结果返回类型和resultMap结果返回类型——输出映射、如果传入是参数是一个包装类怎么使用_resultMap_11


SSM之MyBatis_02_01_resultType结果返回类型和resultMap结果返回类型——输出映射、如果传入是参数是一个包装类怎么使用_resultType_12

输出POJO单个对象

这个很容易理解,上面返回int,这里直接返回一个对象就行了,一样的,不再赘述

SSM之MyBatis_02_01_resultType结果返回类型和resultMap结果返回类型——输出映射、如果传入是参数是一个包装类怎么使用_resultType_13

输出POJO列表

SSM之MyBatis_02_01_resultType结果返回类型和resultMap结果返回类型——输出映射、如果传入是参数是一个包装类怎么使用_resultMap_14

小结

输出单个pojo对象和pojo列表时,mapper映射文件中的resultType的类型是一样的,mapper接口的方法返回值不同。
同样的mapper映射文件,返回单个对象和对象列表时,mapper接口在生成动态代理的时候,会根据返回值的类型,决定调用selectOne方法还是selectList方法。

resultMap结果返回类型

数据库里面的对应的表的字段和我们模型model里面的字段是一样的时候就可以用resultType,如果不一致的话就用resultMap

如果查询出来的列名和属性名不一致,通过定义一个resultMap将列名和pojo属性名之间作一个映射关系。
1、定义resultMap
2、使用resultMap作为statement的输出映射类型
下面看怎么操作

SSM之MyBatis_02_01_resultType结果返回类型和resultMap结果返回类型——输出映射、如果传入是参数是一个包装类怎么使用_resultType_15


比如我们现在查询的结果的列名跟model里面不一样了,我们就得使用resultMap了

SSM之MyBatis_02_01_resultType结果返回类型和resultMap结果返回类型——输出映射、如果传入是参数是一个包装类怎么使用_resultType_16

SSM之MyBatis_02_01_resultType结果返回类型和resultMap结果返回类型——输出映射、如果传入是参数是一个包装类怎么使用_映射文件_17

SSM之MyBatis_02_01_resultType结果返回类型和resultMap结果返回类型——输出映射、如果传入是参数是一个包装类怎么使用_映射文件_18


假如有一个字段相同呢

SSM之MyBatis_02_01_resultType结果返回类型和resultMap结果返回类型——输出映射、如果传入是参数是一个包装类怎么使用_字段_19


再运行看看

SSM之MyBatis_02_01_resultType结果返回类型和resultMap结果返回类型——输出映射、如果传入是参数是一个包装类怎么使用_包装类_20


只要有一个字段一直,返回的数据都不会都为空如果我们非要它全部返回数据怎么做,这就需要resultMap,来进行结果的映射

SSM之MyBatis_02_01_resultType结果返回类型和resultMap结果返回类型——输出映射、如果传入是参数是一个包装类怎么使用_包装类_21


就这么简单

注意resultMap有一定的容错率,但是也要符合逻辑

比如这样也能查出来

SSM之MyBatis_02_01_resultType结果返回类型和resultMap结果返回类型——输出映射、如果传入是参数是一个包装类怎么使用_resultType_22


但是一般我们还是规范的写,只是要知道,mybatis也比较智能,能够智能的有一些容错率

总结

数据库里面的对应的表的字段和我们模型model里面的字段完全一致的时候就可以用resultType,
如果不完全一致的话就用resultMap

附加——如果传入是参数是一个包装类怎么使用

mapper接口

SSM之MyBatis_02_01_resultType结果返回类型和resultMap结果返回类型——输出映射、如果传入是参数是一个包装类怎么使用_resultType_23


SSM之MyBatis_02_01_resultType结果返回类型和resultMap结果返回类型——输出映射、如果传入是参数是一个包装类怎么使用_映射文件_24


对应的映射文件

SSM之MyBatis_02_01_resultType结果返回类型和resultMap结果返回类型——输出映射、如果传入是参数是一个包装类怎么使用_包装类_25


SSM之MyBatis_02_01_resultType结果返回类型和resultMap结果返回类型——输出映射、如果传入是参数是一个包装类怎么使用_resultType_26


这样就行

SSM之MyBatis_02_01_resultType结果返回类型和resultMap结果返回类型——输出映射、如果传入是参数是一个包装类怎么使用_resultMap_27


所有的重点就在于 如果传入是参数是一个包装类怎么使用,在映射文件里面的sql里面参数一定要加上具体的类名打点调用

比如这里的#{user.id}


举报

相关推荐

Mybatis-查询结果返回一个Map

JAVA 形式参数是一个具体类型

0 条评论