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越让人无语。。。。。

目录
相关文章
|
9月前
|
Java 测试技术
SpringBoot整合单元测试&&关于SpringBoot单元测试找不到Mapper和Service报java.lang.NullPointerException的错误
SpringBoot整合单元测试&&关于SpringBoot单元测试找不到Mapper和Service报java.lang.NullPointerException的错误
214 0
|
7月前
|
Java 数据库连接 数据库
mybatis plus 更新值为null的字段
mybatis plus 更新值为null的字段
80 7
|
8月前
|
SQL Java 数据库连接
MyBatis-Plus更新使用null值
MyBatis-Plus更新使用null值
289 2
|
8月前
|
Java Spring
解决Springboot集成ElasticSearch 报错:A bean with that name has already been defined in null and overriding
解决Springboot集成ElasticSearch 报错:A bean with that name has already been defined in null and overriding
270 2
|
9月前
|
SQL Java 关系型数据库
基于SpringBoot使用MyBatisPlus,MyBatisPlus标准数据层开发(CRUD)、MyBatisPlus分页功能的使用
基于SpringBoot使用MyBatisPlus,MyBatisPlus标准数据层开发(CRUD)、MyBatisPlus分页功能的使用
79 2
|
9月前
|
SQL Java 数据库连接
1天搞定SpringBoot+Vue全栈开发 (3)MybatisPlus(数据库操作)
1天搞定SpringBoot+Vue全栈开发 (3)MybatisPlus(数据库操作)
|
9月前
|
开发框架 Java 测试技术
XwFast,我开发了一个基于SpringBoot和MyBatisPlus的敏捷开发框架!
XwFast,我开发了一个基于SpringBoot和MyBatisPlus的敏捷开发框架!
75 1
|
9月前
|
XML Java 数据库连接
MyBatis返回Map时值为null的字段会丢失
MyBatis返回Map时值为null的字段会丢失
154 2
|
9月前
|
Java 数据库连接 数据库
Springboot整合mybatisPlus开发
MyBatis-Plus是一个MyBatis的增强工具,旨在简化开发和提高效率。它在不修改原有MyBatis的基础上提供额外功能。要将MyBatis-Plus集成到SpringBoot项目中,首先通过Maven添加mybatis-plus-boot-starter和相应数据库驱动依赖,然后配置application.yml中的数据库连接信息,并指定Mapper类的扫描路径。Mapper接口可继承BaseMapper实现基本的CRUD操作。
85 0
|
9月前
|
XML Java 数据库连接
Springboot整合mybatisPlus操作数据库
MyBatis-Plus是MyBatis的增强工具,简化开发、提高效率。它提供官网文档,便于集成到SpringBoot项目中。集成步骤包括添加mybatis-plus-boot-starter和数据库驱动依赖,配置数据源,扫描Mapper类包。Mapper接口继承BaseMapper即可使用基本的CRUD操作。示例代码展示了Service层的增删改查实现。MyBatisPlus还支持逻辑删除、自动填充等功能,同时可与Mybatis XML配合使用,通过调整配置指定XML映射文件位置。
82 0