SpringBoot+Mybatis:Mapper注入Could not autowire 问题解决

在使用Springboot+Mybatis开发项目时遇到如下的错误(提示Could not autowire)。虽然能够编译运行无误,但看着让人很是郁闷:

1、确保项目目录无问题

即 springboot 入口函数所在类应该在这些Mapper、Service、Controller子包上级目录,例如com.demo.Mapper、com.demo.Service ,则入口类需在com.demo包下。

2、确保配置文档及入口类没问题

2.1 springboot 配置文档 application.properties

其中的mybatis.mapperLocations 指定 Mapper.xml 路径

2.2 入口类

@SpringBootApplication 注释等价于以默认属性使用 @Configuration,@EnableAutoConfiguration 和 @ComponentScan,通常作为主类的注解

@MapperScan 指定扫描的mapper接口所在的包 (然而我加了还是无卵用)

3、如果上述无效,只能放大招了

3.1 添加 @Repository或@Component(Value=xxxMapper”)注释

直接手动注册,使其能被发现,这样就不会报错

3.2 使用@Autowired(required=false)

此处声明使其可以允许不被注入,这样也不会报错

————————————End——————————————

具体为什么找不到 Mapper 这几天学习过程再研究研究


2017.07.20 注 :网上搜到资料说“通过在mapper 接口上添加@Mapper 注释使其可被@Autowire 使用”。

实验发现虽然也不会报错,但是依然会提示 Could not autowire 错误。之后尝试过@Resource @Qualifier 两种注释,也还是会报错。

另外通过@Mapper 注释后,就不需要在入口类中添加@MapperScan 。


另外推荐个好东西 Lombok ,适合所有Java 开发,很大程度简化Java 代码

[embed]https://projectlombok.org/videos/lombok.ogv[/embed]

觉得不错不妨打赏一笔