在使用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 代码