当前位置: 首页 > news >正文

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

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

在这里插入图片描述

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

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

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

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

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

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

1 @Autowired(required = false)
2 private UserMapper userMapper;

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

总结:

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

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

像这样:

@Resource
private UserMapper userMapper;

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

总结:

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

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

@Repository
public interface UserMapper extends Mapper<User> {}
这样能让你的
@Autowired
private UserMapper userMapper;
不再报红。

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

总结:

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

方法4:用 Lombok


@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class TestService {private final UserMapper userMapper;...}

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

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

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

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

http://www.lryc.cn/news/304938.html

相关文章:

  • 在jar里限制指定的包名才可调用(白名单)。
  • python 提取PDF文字
  • 电气机械5G智能工厂数字孪生可视化平台,推进电气机械行业数字化转型
  • C# (WebApi)整合 Swagger
  • 导入excel某些数值是0
  • wo-gradient-card是一款采用uniapp实现的透明辉光动画卡片
  • Spark: a little summary
  • 018—pandas 生成笛卡尔积排列组合合并多列字符串数据
  • 【算法与数据结构】链表、哈希表、栈和队列、二叉树(笔记二)
  • bugku3
  • 相机的白平衡
  • 刷题日记-Day2- Leedcode-977. 有序数组的平方,209. 长度最小的子数组,59. 螺旋矩阵 II-Python实现
  • Linux命令-chcon命令(修改对象(文件)的安全上下文)
  • 【漏洞复现】大华DSS视频管理系统信息泄露漏洞
  • websocket了解下
  • docker install private registry 【docker 安装 registry 仅证书认证】
  • JavaWeb——004Maven SpringBootWeb入门
  • 数据结构与算法-常用排序算法
  • 链表之“无头单向非循环链表”
  • 一休哥助手网页版如何使用
  • 个人博客系统测试
  • 智慧应急的未来:物联网技术引领智慧应急发展新趋势
  • 字符串摘要(C语言)
  • Linux进一步研究权限-----------ACL使用
  • 剪辑视频调色软件有哪些 剪辑视频软件哪个最好 剪辑视频怎么学 剪辑视频的方法和步骤 会声会影2024 会声会影视频制作教程
  • 【Linux进阶之路】Socket —— “UDP“ “TCP“
  • 一些用 GPT 翻译的计算机科学/人工智能 PDF 讲义
  • 重大更新:GPT-4 API 现全面向公众开放!
  • 【Python笔记-设计模式】对象池模式
  • 反序列化 [NPUCTF2020]ReadlezPHP1