SpringBoot项目Bean加载配置引发的Invalid bound statement (not found): com.example.demo.Service.UserService...

项目采用的技术选型

  • 前端
    • Vue框架
  • 后端
    • SpringBoot
    • MyBatis
    • MyBatis-Plus
    • MySQL

问题描述


        点击登录之后控制台就报错了,提示MyBatis 无法找到名为 userLogin 的绑定语句。但是我使用的是SpringMVC框架的三层架构模式(Controller + Service + Mapper)。我也检查了是否将它们装配为Bean。

通过 DeBug 发现在代码走到 Service 就直接报错了。我当时就懵了,从来没遇到过这种问题,后来调试发现装配的 UserService Bean 根本不是自己写的那个类,因为我的业务层并没有继承 MyBatis-Plus 提供的 iService


@Resource 注解回顾

        首先,复习一下 @Resource 注解加载 Bean 的方式

1. 按名称自动装配(Name-based Autowiring)

        默认情况下,@Resource 注解按照名称进行自动装配。当你在一个字段上使用 @Resource 且不指定任何属性时,Spring 会尝试找到一个与字段名称相同的 Bean 进行注入。如果你想按名称注入,也可以明确指定 name 属性:   

@Resource(name="myBean")
private MyBean myBean;

2. 按类型自动装配(Type-based Autowiring)

        如果没有找到匹配的 Bean 名称,Spring 会退回到按类型自动装配。它会尝试找到一个与字段类型匹配的唯一 Bean。如果存在多个类型匹配的 Bean,Spring 将抛出异常,除非使用 name 属性指定了具体的 Bean。

 解决思路

        到这里我就能锁定是由于没有指定加载 Bean 的名称导致加载到了 MyBatis-Plus 框架的某个 Bean 引发的问题。于是,修改了代码。

@Service("myUserService")
public class UserServiceImpl implements UserService {
@Resource(name = "myUserService")
UserService userService;

到这里,问题就解决了。

 

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值