SpringBoot + MybatisPlus:mapper注入为null

简介: 问题描述Service类中自动注入一个mapper,运行后发现注入失败无法使用。@Componentpublic class KeyService {    @Resource    XXXKeyMapper xXXKeyMapper;    ...}@Mapperpublic interface XXXKeyMapper extends BaseMapper<Object

问题描述

Service类中自动注入一个mapper,运行后发现注入失败无法使用。

@Component
public class KeyService {

    @Resource
    XXXKeyMapper xXXKeyMapper;

    ...
}
@Mapper
public interface XXXKeyMapper extends BaseMapper<Object>{

    List<String> queryByAk(String ak); // 具体方法用同名xml中的sql语句实现

}

排查:mapper.java和mapper.xml的目录

mapper.java和mapper.xml需要有相同的path from source root,例如:

mapper.java:com/aliyun/{department}/{project}/{module}/mapper/XXXKeyMapper.java

mapper.xml:com/aliyun/{department}/{project}/{module}/mapper/XXXKeyMapper.xml

排查:mapper.xml的namespace

namespace出错时会在编译时报错Error while adding the mapper xxx to configuration.

namespace应该指向mapper.java的reference path

排查:application中的@MapperScan

如果运行时没有指定扫描该mapper的路径则也会出现找不到bean的情况,需要在application的注解中加上

@MapperScan(value = {"com.aliyun.{department}.{project}.{module}.mapper*"})

排查:待注入Mapper类的新建方式

使用反射class.newInstance()获取实例时,实例中的@Autowired无法自动注入,因为反射与Spring的IOC容器无关,所以应该改为KeyService service = applicationContext.getBean(KeyService.class)

好了虽然看起来是个弱智的bug但是因为新建实例的逻辑在二方库里而mapper在应用里,所以排查起来只想到了mapper这边,查了好久才想到新建实例这边也可能有问题,只能说debug时间越长,bug越让人无语。。。。。

目录
相关文章
|
8月前
|
Java
springboot字段注入@value细节
springboot字段注入@value细节
|
8月前
|
Java
springboot自动注入避坑
springboot自动注入避坑
|
4月前
|
Java Shell C++
Springboot加载注入bean的方式
本文详细介绍了Spring Boot中Bean的装配方法。首先讲解了使用@Component、@Service、@Controller、@Repository等注解声明Bean的方式,并解释了这些注解之间的关系及各自适用的层次。接着介绍了通过@Configuration和@Bean注解定义Bean的方法,展示了其灵活性和定制能力。最后讨论了@Component与@Bean的区别,并提供了在Spring Boot应用中装配依赖包中Bean的三种方法:使用@ComponentScan注解扫描指定包、使用@Import注解导入特定Bean以及在spring.factories文件中配置Bean。
153 0
|
7月前
|
Java 数据库连接 数据库
mybatis plus 更新值为null的字段
mybatis plus 更新值为null的字段
88 7
|
6月前
|
缓存 Java 数据库连接
Spring Boot 资源文件属性配置,紧跟技术热点,为你的应用注入灵动活力!
【8月更文挑战第29天】在Spring Boot开发中,资源文件属性配置至关重要,它让开发者能灵活定制应用行为而不改动代码,极大提升了可维护性和扩展性。Spring Boot支持多种配置文件类型,如`application.properties`和`application.yml`,分别位于项目的resources目录下。`.properties`文件采用键值对形式,而`yml`文件则具有更清晰的层次结构,适合复杂配置。此外,Spring Boot还支持占位符引用和其他外部来源的属性值,便于不同环境下覆盖默认配置。通过合理配置,应用能快速适应各种环境与需求变化。
71 0
|
6月前
|
安全 Java 开发者
开发者必看!@Resource与private final的较量,Spring Boot注入技巧大揭秘,你不可不知的细节!
【8月更文挑战第29天】Spring Boot作为热门Java框架,其依赖注入机制备受关注。本文通过对比@Resource(JSR-250规范)和@Autowired(Spring特有),并结合private final声明的字段注入,详细探讨了两者的区别与应用场景。通过示例代码展示了@Resource按名称注入及@Autowired按类型注入的特点,并分析了它们在注入时机、依赖性、线程安全性和单一职责原则方面的差异,帮助开发者根据具体需求选择最合适的注入策略。
247 0
|
8月前
|
SQL Java 数据库连接
MyBatis-Plus更新使用null值
MyBatis-Plus更新使用null值
303 2
|
9月前
|
SQL Java 关系型数据库
基于SpringBoot使用MyBatisPlus,MyBatisPlus标准数据层开发(CRUD)、MyBatisPlus分页功能的使用
基于SpringBoot使用MyBatisPlus,MyBatisPlus标准数据层开发(CRUD)、MyBatisPlus分页功能的使用
86 2
|
8月前
|
Java Linux 程序员
技术笔记:Spring生态研习【五】:Springboot中bean的条件注入
技术笔记:Spring生态研习【五】:Springboot中bean的条件注入
|
9月前
|
SQL Java 数据库连接
1天搞定SpringBoot+Vue全栈开发 (3)MybatisPlus(数据库操作)
1天搞定SpringBoot+Vue全栈开发 (3)MybatisPlus(数据库操作)