已解决:IDEA中@Autowired自动注入MyBatis Mapper报红警告的几种解决方法

今天在使用 IDEA 使用 MyBatis 的时候遇到了这种情况:

可以看到 userMapper 下有个红色的波浪警告,虽然代码没有任何问题,能正常运行,但是这个红色警告在这里杵着确实让人很窝心。

于是我在网上找了找,最终明白了原因所在:

  • 因为 IDEA 可以智能的理解上下文,然而 UserMapper 这个接口是 MyBatis 的 IDEA 理解不了。
  • @Autowired 注解,默认情况下要求依赖对象(也就是 userMapper )必须存在。而 IDEA 认为这个对象的实例/代理是个 null ,所以就友好地给个提示。

然后最终的解决方案总结了几个,按需使用把:

方法1:为 @Autowired 注解设置 required = false

使用 @Autowired 注解时,若希望允许 null 值,可设置 required = false,像这样:

java 复制代码
1 @Autowired(required = false)
2 private UserMapper userMapper;

这样就不会有警告了。原因很好理解:IDEA 认为 userMapper 是个 null ,给了警告;加上 required = false 后,使用 @Autowired 注解不再去校验 userMapper 是否存在了。也就不会有警告了。

总结:

这种方式有点蛋疼。一个庞大的既有项目,可能到处都在引用 Mapper,总不能到处都补上 required = false 吧......而且对于新手/新员工,很难一眼看懂加 required = false 属性只是为了解决 IDEA 的警告。

方法2:使用 @Resource 替换 @Autowired

像这样:

java 复制代码
@Resource
private UserMapper userMapper;

这样也不会再有讨厌的警告。如果你对原因感兴趣,不妨了解一下《@Autowired 与@Resource的区别》。

总结:

这种方式挺赞,但如果一个项目已经大量使用 @Autowired ,然后为了个警告到处改成 @Resource ,也有点蛋疼。

方法3:在 Mapper 接口上添加 @Repository 注解

java 复制代码
@Repository
public interface UserMapper extends Mapper<User> {

}
这样能让你的
@Autowired
private UserMapper userMapper;
不再报红。

当然,如果你用 @Component 替换 @Repository 也是可以的。原理大致:IDEA 不是认为 userMapper 是个 null 嘛...加个 @Repository 注解骗一下 IDEA 就OK了......

总结:

这种方式比较赞,改动小,也简单,我比较喜欢。

方法4:用 Lombok

java 复制代码
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class TestService {

    private final UserMapper userMapper;
    ...

}

方法5:把 IDEA 的警告关掉。

个人没试过,也没有动力去试。没有提示的 IDEA 是没有灵魂的,我从来不去修改 IDEA 的任何警告设置。

方法6:安装 mybatis plugin 即可解决该问题。

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

相关推荐
S***26753 小时前
基于SpringBoot和Leaflet的行政区划地图掩膜效果实战
java·spring boot·后端
马剑威(威哥爱编程)4 小时前
鸿蒙6开发视频播放器的屏幕方向适配问题
java·音视频·harmonyos
JIngJaneIL4 小时前
社区互助|社区交易|基于springboot+vue的社区互助交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·社区互助
V***u4534 小时前
MS SQL Server partition by 函数实战二 编排考场人员
java·服务器·开发语言
这是程序猿4 小时前
基于java的ssm框架旅游在线平台
java·开发语言·spring boot·spring·旅游·旅游在线平台
i***t9195 小时前
基于SpringBoot和PostGIS的云南与缅甸的千里边境线实战
java·spring boot·spring
k***08295 小时前
【监控】spring actuator源码速读
java·spring boot·spring
麦麦鸡腿堡5 小时前
Java_网络编程_InetAddress类与Socket类
java·服务器·网络
vx_dmxq2115 小时前
【PHP考研互助系统】(免费领源码+演示录像)|可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案
java·spring boot·mysql·考研·微信小程序·小程序·php
5***g2985 小时前
新手如何快速搭建一个Springboot项目
java·spring boot·后端