springboot之resultType及resultMap的正确打开方式【超级详细】

1,041 阅读7分钟

👨‍🎓作者:bug菌
✏️博客:CSDN掘金infoQ51CTO
🎉简介:CSDN博客专家,C站历届博客之星Top50,掘金/InfoQ/51CTO等社区优质创作者,全网合计8w粉+,对一切技术感兴趣,重心偏Java方向;硬核公众号「 猿圈奇妙屋」,欢迎小伙伴们的加入,一起秃头,一起变强。
..
✍️温馨提醒:本文字数:1999字, 阅读完需:约 5 分钟

       嗨,家人们,我是bug菌呀,我又来啦。今天我们来聊点什么咧,OK,接着为大家更《springboot零基础入门教学》系列文章吧。希望能帮助更多的初学者们快速入门!

       小伙伴们在批阅文章的过程中如果觉得文章对您有一丝丝帮助,还请别吝啬您手里的赞呀,大胆的把文章点亮👍吧,您的点赞三连(收藏⭐+关注👨‍🎓+留言📃)就是对bug菌我创作道路上最好的鼓励与支持😘。时光不弃🏃🏻‍♀️,创作不停💕,加油☘️

一、前言🔥

环境说明:Windows10 + Idea2021.3.2 + Jdk1.8 + SpringBoot 2.3.1.RELEASE

       哈喽,小伙伴们,我是bug菌呀👀,不知不觉就一年又4月,正是踏青郊游的好时节。可上海疫情,除了在家远程办公就是看点技术顺便卷点文章。这不是4月又出了更文活动,逼自己一把,坚持每天做点内容输出,养成写作习惯,将来你会回来感谢曾经的自己坚持了一把才有此刻的辉煌成就。

       小伙伴们在批阅文章的过程中如果觉得文章对您有一丝丝帮助,还请别吝啬您手里的赞呀,大胆的把文章点亮👍吧,您的点赞三连(收藏⭐️+关注👨‍🎓+留言📃)就是对bug菌我创作道路上最好的鼓励与支持😘。时光不弃🏃🏻‍♀️,掘金不停💕,加油☘️​

二、版本说明🔥

环境:springboot 2.3.1.REALSE + mybatis-plus 3.2.0 + jdk1.8 + mysql 5.6

三、文章概述🔥

       今天,我要给大家讲一个我因前几天遇到的一个bug,由此为灵感而想跟大家分享这个东西,既专写一篇关于[ 如何正确使用resultType/resultMap ]的文章,具有很好的入门教学,希望能帮助更多小伙伴💯,不会因它们而犯低级错💥。

       废话不多说,咱们就开始这期的内容教学内容吧😳。

四、正文🔥

       我们都非常熟悉,日常使用 mybatis 在进行select查询映射的时候,返回类型既可以用resultType,也可以用resultMap。这两啥时候分别啥时候用?这二者究竟又有啥同异呢?这些问题小伙伴们有思考过么?如果没有,那么也没关系,今天我来给大家进行一一解惑。

我们先从mybatis官网文档中,了解到对resultType/resultMap 是这么描述的:

  • ResultType:从这条语句中返回结果的类全限定名或别名。 注意,如果返回的是一个集合,那resultType设置为集合包含的类型,而不是集合本身类型。
  • ResultMap: 对外部 resultMap 的命名引用,就是映射实体类的数据类型。

提示:

       经测试,同一个select查询,resultTyperesultMap 二者也可以同时使用。但不推荐啊,一般都是选其一使用即可,因为没必要同时使用。(为什么要做这么个测试呢?目的是为了验证我看到网上某一博主提出的一个二者不能同时使用的观点!经测试,这是不对的,二者可以同时使用。)

具体测试演示截图如下:

1️⃣resultType

       resultType可以直接为返回的值类型进行定义,比如给定为String、int、double、float、long、Map等数据类型;列举如下:

<select id="findAllProfessionalGroup3" resultType="int">

</select>

<select id="findAllProfessionalGroup3" resultType="String">

</select>

       其中返回的List也是将返回类型定义为Map,然后mybatis会自动将这些map存放到一个List中,dao层用可用Map接收。

<select id="findAllProfessionalGroup3" resultType="Map">

</select>

       还有resultType也可以是一个对象,举例如下:

<select id="findAllProfessionalGroup3" resultType="com.example.review.vo.UserInfoVo">

</select>

       其中resultType指定的是返回该对象的相对地址,比如你参考下我的项目中UserInfoVo对象的目录地址,你就会明白了,大家请看:

       切记,如果你是使用 resultType指定一个对象时,即要求你的sql查询语句查询出的字段在相应的pojo中必须有和它相同的字段对应。但是,如果列名没有精确匹配,你也可以在查询字段上定义别名(sql 的as 用法可以了解一下)。

具体请参考我的演示:

       如果没有字段名对应,sql查询不会报错,也会正常返回该对象,但是对象整体都为空。不信的小伙伴可以自己去测试一下。我是返实测返回一个list<XxxVo> res,但是debug看到该res显示All elements are null

具体大家请看截图:

2️⃣resultMap

       而resultMap呢,其实也与resultType定义对象很pojo很类似,为什么这么说呢?因为它只适合使用返回值是自定义实体类的情况。

其中resultMap标签解析:

  • id:为 resultMap标签在Xxxmapper.xml文件中的唯一标识。比如:BaseResultMap1
  • type:最终要映射的实体类pojo。比如:FindByProfessionalGroupTopFiveVo。
  • column: 库表的字段名。比如:professional_group、job_number。
  • property:实体类pojo里的属性名。比如:professionalGroupName、accountId。

... ...

       ok,以上这样就好啦,如果还想学习更多,你可以看看我的往期热文推荐哦,每天积累一个奇淫小知识,日积月累下去,你一定能成为令人敬仰的大佬的。好啦,咱们下期见~

五、往期推荐🔥

文末🔥

       如果还想要学习更多,小伙伴们可关注bug菌专门为大家创建的专栏《springboot零基础入门教学》,从无到有,从零到一!希望能帮助到更多小伙伴们。

       我是bug菌,一名想走👣出大山改变命运的程序猿。接下来的路还很长,都等待着我们去突破、去挑战。来吧,小伙伴们,我们一起加油!未来皆可期,fighting!

感谢认真读完我博客的铁子萌,在这里呢送给大家一句话,不管你是在职还是在读,绝对终身受用。
时刻警醒自己:
抱怨没有用,一切靠自己;
想要过更好的生活,那就要逼着自己变的更强,生活加油!!!