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月前
|
SQL Java 数据库连接
【YashanDB知识库】解决mybatis的mapper文件sql语句结尾加分号";"报错
【YashanDB知识库】解决mybatis的mapper文件sql语句结尾加分号";"报错
|
5月前
|
SQL XML Java
MyBatis Mapper中使用limit参数的查询问题
总结而言,MyBatis中使用 `limit`参数的查询可以高度定制并且灵活,基于方法签名和XML映射文件的组合来达成多样化的查询需求。通过参数化查询和动态SQL,MyBatis可以有效地处理各种复杂情境下的数据库操作,并且将SQL语句的维护与业务代码的编写相分离,提升代码的可维护性和可阅读性。
511 13
|
6月前
|
SQL Java 数据库
解决Java Spring Boot应用中MyBatis-Plus查询问题的策略。
保持技能更新是侦探的重要素质。定期回顾最佳实践和新技术。比如,定期查看MyBatis-Plus的更新和社区的最佳做法,这样才能不断提升查询效率和性能。
278 1
|
9月前
|
SQL Java 数据库连接
【YashanDB 知识库】解决 mybatis 的 mapper 文件 sql 语句结尾加分号";"报错
【YashanDB 知识库】解决 mybatis 的 mapper 文件 sql 语句结尾加分号";"报错
|
11月前
|
SQL JavaScript Java
Spring Boot 3 整合 Mybatis-Plus 实现数据权限控制
本文介绍了如何在Spring Boot 3中整合MyBatis-Plus实现数据权限控制,通过使用MyBatis-Plus提供的`DataPermissionInterceptor`插件,在不破坏原有代码结构的基础上实现了细粒度的数据访问控制。文中详细描述了自定义注解`DataScope`的使用方法、`DataPermissionHandler`的具体实现逻辑,以及根据用户的不同角色和部门动态添加SQL片段来限制查询结果。此外,还展示了基于Spring Boot 3和Vue 3构建的前后端分离快速开发框架的实际应用案例,包括项目的核心功能模块如用户管理、角色管理等,并提供Gitee上的开源仓库
2264 11
|
11月前
|
SQL Java 数据库连接
【潜意识Java】深入理解MyBatis的Mapper层,以及让数据访问更高效的详细分析
深入理解MyBatis的Mapper层,以及让数据访问更高效的详细分析
1891 1
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
3267 2
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
|
Java 数据库连接 mybatis
Springboot整合Mybatis,MybatisPlus源码分析,自动装配实现包扫描源码
该文档详细介绍了如何在Springboot Web项目中整合Mybatis,包括添加依赖、使用`@MapperScan`注解配置包扫描路径等步骤。若未使用`@MapperScan`,系统会自动扫描加了`@Mapper`注解的接口;若使用了`@MapperScan`,则按指定路径扫描。文档还深入分析了相关源码,解释了不同情况下的扫描逻辑与优先级,帮助理解Mybatis在Springboot项目中的自动配置机制。
885 1
Springboot整合Mybatis,MybatisPlus源码分析,自动装配实现包扫描源码
|
SQL Java 数据库连接
mybatis使用四:dao接口参数与mapper 接口中SQL的对应和对应方式的总结,MyBatis的parameterType传入参数类型
这篇文章是关于MyBatis中DAO接口参数与Mapper接口中SQL的对应关系,以及如何使用parameterType传入参数类型的详细总结。
410 10
|
Java 数据库连接 API
springBoot:后端解决跨域&Mybatis-Plus&SwaggerUI&代码生成器 (四)
本文介绍了后端解决跨域问题的方法及Mybatis-Plus的配置与使用。首先通过创建`CorsConfig`类并设置相关参数来实现跨域请求处理。接着,详细描述了如何引入Mybatis-Plus插件,包括配置`MybatisPlusConfig`类、定义Mapper接口以及Service层。此外,还展示了如何配置分页查询功能,并引入SwaggerUI进行API文档生成。最后,提供了代码生成器的配置示例,帮助快速生成项目所需的基础代码。
717 1