记录:springboot使用resultType报错java.lang.NullPointerException: null...亲测有效

Posted bug菌¹

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记录:springboot使用resultType报错java.lang.NullPointerException: null...亲测有效相关的知识,希望对你有一定的参考价值。

👨‍🎓作者:bug菌

✏️博客:CSDN掘金

💌公众号:猿圈奇妙屋

🚫特别声明:原创不易,转载请附上原文出处链接和本文声明,谢谢配合。

🙏版权声明:文章里可能部分文字或者图片来源于互联网或者百度百科,如有侵权请联系bug菌处理。

一、前言🔥

环境:springboot2.3.1.REALSE + mysql5.6 + jdk1.8

二、报错详情🔥

        又是找bug的一天,非常之离谱!又是给同事排错,虽然对于我而言,其实排错无非就是debug,但是业务逻辑不清楚的地方,对自己而言还得盯人家写的理一遍,多耽误事儿呀!但是总不能放任报错不管吧,能咋办,改bug呗!

        此处控制台是直接空指针,一般就是返回集合或对象为空,但你没有进行验空就直接使用它来获取里头的元素或属性就会报空指针。

        所以具体问题咋哪儿呢?其实就只需要看控制台打印的报错位于哪里,去那里degue看一眼,其实八九不离十就按我说的思路排一遍就清楚了。

如下是具体控制台报错截图:

三、报错分析🔥

        我们看报错显示在ChartsServiceImpl.java文件的第437行,我们直接打开这个文件,去看这块代码,437行是一个map.put()过程,如果这行代码导致报错,那铁定是pg.getProfessionalGroupName()这里获取属性才能导致空指针!

        我们再看pg是遍历professionalGroups集合获取到的一个对象,那就说明,在这个对象里头的professionalGroupName属性为null。

         我们再来看一下,确实是因为pg对象为null,获取其professionalGroupName属性才空指针。

         为了验证我的猜测,我打算直接本地debug断点在获取professionalGroups集合这一行,看看professionalGroups集合里头装的到底是什么?

        好家伙,大家请看,果不其然,professionalGroups(ArrayList),其中size 为 2,但具体显示却又All elements are null,这是为何?

        一般情况都是直接展示具体对象值,但是这里却展示All elements are null,那我们来分析一下为何会产生All elements are null问题,首先我们都知道List是允许插入空值,然后,mybtis映射到List有空值。那么Mybatis映射到List有空值,就有可能是以下情况了

  1. sql语句映射有问题。
  2. 可能sql本身产生了一条为null的记录。

        我们继续排查,检查一下这个方法所执行的源sql。大家请看,首先sql语法是没问题的。

        返回类型是个对象,且使用的是resultType,我们都知道使用resultType指定返回对象pojo,其必定要求sql返回字段名的驼峰命名要与你指定的pojo属性要一致,否则是无法映射上该字段的。

        所以我们直接打开该FindByProfessionalGroupTopFiveVo 对象看一眼,一切就会真相大白了!好家伙,果然是驼峰命名不一致,sql没有指定别名,所以转驼峰是professionalGroup,而vo中所定义的属性名又为professionalGroupName。

        所以,推理到这里,小伙伴们都知道应该怎么改了么?

四、解决方案🔥

        为解决映射关系,以下我提供的三种解决方案,仅供参考。

1️⃣方案一:

        只修改vo,将FindByProfessionalGroupTopFiveVo对象中的professionalGroupName属性名改成professionalGroup。

具体演示请看如下: 

2️⃣方案二:

       只修改源sql,将professional_group 进行别名,指定名称为professionalGroupName即可。

具体演示请看如下:  

3️⃣方案三:

        使用resultMap,然后定义一个resultMap,其中指定一下映射名。

具体演示请看如下: 

 ... ...

        好啦,以上就是解决该报错的所有内容啦,你们学废了么?如果对你有所帮助,还请不要忘记给bug菌[三连支持]哟。如果想获得更多的学习资源或者想和更多的技术爱好者一起交流,可以关注我的公众号『猿圈奇妙屋』,后台回复关键词领取学习资料、大厂面经、面试模板等海量资源,就等你来拿。

五、文末🔥

        如果你还想要学习更多,小伙伴们大可关注bug菌专门为你们创建的专栏《bug调优》,都是我一手打下的江山,持续更新中,希望能帮助到更多小伙伴们。

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

        最后送大家两句我很喜欢的话,与诸君共勉!


☘️做你想做的人,没有时间限制,只要愿意,什么时候都可以start。

🍀你能从现在开始改变,也可以一成不变,这件事,没有规矩可言,你可以活出最精彩的自己。


​​​​​​

💌如果文章对您有所帮助,就请留下您的吧!(#^.^#);

💝如果喜欢bug菌分享的文章,就请给bug菌点个关注吧!(๑′ᴗ‵๑)づ╭❤~;

💗如果对文章有任何疑问,还请文末留言或者加群吧【QQ交流群:708072830】;

💞鉴于个人经验有限,所有观点及技术研点,如有异议,请直接回复参与讨论(请勿发表攻击言论,谢谢);

💕版权声明:原创不易,转载请附上原文出处链接和本文声明,版权所有,盗版必究!!!谢谢。

开发者涨薪指南 48位大咖的思考法则、工作方式、逻辑体系

以上是关于记录:springboot使用resultType报错java.lang.NullPointerException: null...亲测有效的主要内容,如果未能解决你的问题,请参考以下文章

mybatis resultType="map"查询不到值

记录一次bug解决过程:resultType和手动开启事务

MyBatis应用开发(10)映射之结果映射resultType

mybatis select返回多条记录即返回类型为list时

mybatis select返回多条记录即返回类型为list时

为啥在springboot中mybatis的映射文件不能使用别名