SpringBoot与MyBatis整合的时候,也遇到过这个问题。
原因可能有两个,
第一个是IntellijIDEA本身工具的问题。
第二个便是我们导入@Service包的时候导入包错误造成的
检查完第二个问题后,没有发现问题,那就是idea的问题,
问题产生的原因:因为 @Mapper 这个注解是 Mybatis 提供的,而 @Autowried 注解是 Spring 提供的,IDEA能理解 Spring 的上下文,但是却和 Mybatis 关联不上。而且我们可以根据 @Autowried 源码看到,默认情况下,@Autowried 要求依赖对象必须存在,那么此时 IDEA 只能给个红色警告了。
解决方案:
方案一
在自动转配的注解后面添加(required=false)
@Autowired(required=false)
public UserMapper userMapper;
当我们在使用@Autowired注解的时候,默认required=true,表示注入的时候bean必须存在,否则注入失败。
方案二
更改idea的设置
效果如下:
方案三
在UserMapper上面添加
@Component(value =“userMapper”)
虽然能解决红线的问题,
@Component注解,表明当需要创建类时,这个被注解的类是一个候选类。相当于类交给Spring管理,重新起个名字叫userMapper,但是并不推荐这样做。
在SpringBoot中集成MyBatis,可以在mapper接口上添加@Mapper注解,将mapper注入到Spring。但是如果每一给mapper都添加@mapper注解会很麻烦!!!
这时可以使用@MapperScan注解来扫描包。
所以,一般在Application上面标注了MapperScan,如图所示。