解决mapper.xml文件的resultType爆红问题:Cannot resolve symbol 'xxx'
- 1.问题描述
- 2.问题分析
- 3.问题解决
- 3.1 配置注解(推荐)
- 3.2 配置全类名
- 3.3 删除插件
- 4.事件感悟
系统:Win10
JDK:1.8.0_333
IDEA:2022.2.4
SpringBoot:2.7.6
1.问题描述
在一次开发 SpringBoot 项目时,配合使用 MybatisPlus 返回实体类时,配置的 mapper.xml 文件的 resultType 属性爆红,鼠标放上去提示:
Cannot resolve symbol ‘TmsTb01’
如下图所示:
打开对应的Mapper文件,可以发现对应的方法也是爆红,鼠标放上去提示:
Result type not match for select id=“selectByTime”
srcType:
targetType: com.electric.srm.entity.tms.TmsTb01
如下图所示:
2.问题分析
这里我查了一下,发现网上有各种各样的可能会导致这个问题,我这里将我这个项目的情况描述下
- 1. 项目运行没有问题(说明代码都是对的,该配置的都已经配置好了,只是显示的问题)
比如这里的 type-aliases-package: com.electric.srm.entity 别名扫描我都是配置好了的 - 2. 没有多余或少插件(这里看到其他人有可能装了什么不该装的插件,或者少了什么插件,我这里都不是)
比如什么 Lombok 插件我是装了的
3.问题解决
3.1 配置注解(推荐)
在返回实体类上添加一个注解:@Alias(“TmsTb01”),这里可以看到添加之后,resultType就不会爆红了
3.2 配置全类名
这里我们如果将 resultType 改为全类名,也可以达到消除爆红的效果(已测试),不过这样显得我们配置的别名扫描很笨,所以我就没用这个方案
3.3 删除插件
我看到还有一种方案是,删除 MybatisX 插件,这个插件用起来挺可爱的,我就没考虑这个方案,不过感觉应该有效
4.事件感悟
这次从发现这个问题到处理这个问题,花了我大概两个小时,虽然这个问题不影响项目的正常运行,不过当我看到这些爆红的提示,那是相当的难受,稍微有点强迫症。不过这上面三种解决方案还不是我理想的解决方案,我感觉既然代码能够运行,没有报错,那说明代码就是正确的,为什么会提示红色报错呢。
我感觉大概率是 MybatisX 的问题导致的这个报错问题,希望后面这个插件能够更新处理这个问题,或者有人打脸说不是这个问题,给我一个更好的解决方案。
在这次解决问题的过程中,我也想过有没有可能是依赖的版本问题,或者配置问题,说到底还是学艺不精、功力不厚,希望后面能够不断学习,逐渐成长,遇到 BUG 不要害怕,而是勇敢的面对它,坚持就是胜利,奥利给。