idea注入mapper报错报红的几种解决方案
前言
相信大家在使用idea的时候一定会遇到这样的问题,就是在service里注入mapper的时候,明明代码没有问题,也可以运行,但是idea它就是给你报个错,有个红色的波浪线在下面,这让人感觉很不舒服。怎么办呢?
先来大概说一下,产生这种现象的原因。idea其实是非常智能的,它可以理解Spring的上下文,然而 XxxxMapper 这种接口是Mybatis的,IDEA它理解不了。再加上 @Autowired 这个注解呢,它默认情况下要求依赖对象(也就是 XxxxMapper )必须存在,而IDEA认为这个对象的实例/代理是个null,所以就友好地给个提示,给你报个红~
今天就说一下以下几种解决方案
方法1:为 @Autowired 注解设置required = false
使用 @Autowired 注解时,若希望允许null值,可设置required = false
像这样:
这样就不会有警告了。原因很好理解:IDEA认为cashTicketMapper是个null,给了警告;加上required = false后,使用 @Autowired 注解不再去校验userMapper是否存在了,也就不会有警告了。
但是,这种方式有点蛋疼!一个庞大的既有项目,可能到处都在引用Mapper,总不能到处都补上 required = false 吧。而且对于新手/新员工,很难一眼看懂加required = false属性只是为了解决IDEA的警告。
方法2:用 @Resource 替换 @Autowired
像这样:
这样也不会再有讨厌的警告。如果你对原因感兴趣,不妨去了解一下@Autowired 与@Resource的区别
这种方式挺赞,但如果一个项目已经大量使用@Autowired,然后为了个警告到处改成@Resource,也有点蛋疼。
方法3:在Mapper接口上加上@Repository注解
像这样:
这样也能让你的
@Autowired private StdNmRecordMapper stdNmRecordMapper;
不再报错。
当然,如果你用@Component替换@Repository也是可以的。原理大致:IDEA不是认为 userMapper 是个null…
加个@Repository注解或者@Component骗一下IDEA就OK了……
这种方式也比较赞,改动小,也简单,我比较喜欢。
方法4:用Lombok
像这样:
Lombok生成的代码是这样的:
@Service public class TestService { private CashTicketMapper cashTicketMapper; @Autowired public TestService(CashTicketMapper cashTicketMapper;) { this.cashTicketMapper= cashTicketMapper; } }
但如果自己手写成Lombok生成的代码,IDEA依然会给你报警告 。我猜,应该是IDEA的Lombok插件把IDEA搞懵逼了…所以不提示了…
方法5:把IDEA的警告关闭掉
这个方法比较不推荐
,感觉没有提示的IDEA是没有灵魂的,所以不推荐。我也从来不去修改IDEA的任何警告设置。
但是大家可以按照下图去试试
好了,以上就是 idea 注入mapper报错报红的几种解决方案,希望对你有所帮助~
方法6:不用管他
这只是一个提示,并不影响程序运行,如果没有强迫症的话,可以不用管他。
到此这篇关于idea注入mapper报错报红的几种解决方案的文章就介绍到这了,更多相关idea注入mapper报错报红内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Java Fluent Mybatis实战之构建项目与代码生成篇上
Java中常用的ORM框架主要是mybatis, hibernate, JPA等框架。国内又以Mybatis用的多,基于mybatis上的增强框架,又有mybatis plus和TK mybatis等。今天我们介绍一个新的mybatis增强框架 fluent mybatis2021-10-10spring boot输入数据校验(validation)的实现过程
web项目中,用户的输入总是被假定不安全不正确的,在被处理前需要做校验。本文介绍在spring boot项目中实现数据校验的过程,通过实例代码给大家介绍的非常详细,需要的朋友参考下吧2021-09-09
最新评论