当前位置: 首页 > 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 即可解决该问题。

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • JAVA工程师面试专题-JVM篇
  • notepad++的下载与使用
  • Maven setting.xml 配置
  • Job 和 DaemonSet
  • MySQL安装教程(详细版)
  • JavaScript:防抖与节流
  • C# 中的回调函数
  • 【笔记】【算法设计与分析 - 北航童咏昕教授】绪论
  • v-rep插件
  • AWS Elastic Beanstalk通过单实例配置https
  • 【STM32 CubeMX】adxl345加速度传感器
  • 面试经典150题 -- 链表 (总结)
  • EasyCaptcha,开源图形验证码新标杆!
  • 软件测试进阶自动化测试流程
  • 人工智能_普通服务器CPU_安装清华开源人工智能AI大模型ChatGlm-6B_001---人工智能工作笔记0096
  • JavaScript-如何实现克隆(clone)函数
  • Angular 响应式表单 基础例子
  • C# 免费离线人脸识别 2.0 Demo
  • java多线程
  • Java应用性能调优
  • MySQL几个简单SQL的优化
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 如何编写一个可升级的智能合约
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 消息队列系列二(IOT中消息队列的应用)
  • 小李飞刀:SQL题目刷起来!
  • 延迟脚本的方式
  • ​iOS实时查看App运行日志
  • ​用户画像从0到100的构建思路
  • #pragam once 和 #ifndef 预编译头
  • #Spring-boot高级
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • $().each和$.each的区别
  • (C)一些题4
  • (c语言)strcpy函数用法
  • (LeetCode) T14. Longest Common Prefix
  • (编译到47%失败)to be deleted
  • (独孤九剑)--文件系统
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (七)Flink Watermark
  • (三)docker:Dockerfile构建容器运行jar包
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (轉貼) 寄發紅帖基本原則(教育部禮儀司頒布) (雜項)
  • ***利用Ms05002溢出找“肉鸡
  • .NET C# 使用 iText 生成PDF
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .net MVC中使用angularJs刷新页面数据列表
  • .Net(C#)常用转换byte转uint32、byte转float等
  • .NET6实现破解Modbus poll点表配置文件