访问mapper方法提示invalid bound statement (not found)

该博客记录了mapper代码问题的检查点与解决办法。检查点包括mapper.xml中namespace与mapper接口地址是否一致、mapper.java接口方法名和mapper.xml中statement的id是否一致等。解决办法有终极方案,即新建项目重写代码;折中方案,即复制部分代码,重写影响部分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习记录

检查什么地方

  1. 检查 mapper.xml 中 namespace 等于是否与mapper接口地址一致
  2. 检查mapper.java 接口中的方法名和 mapper.xml 中的statement 的 id 是否保持一致。
  3. mapper接口中的方法返回值是List,而select元素没有正确配置ResultMap,或者只配置ResultType

终级方案

重新新建一个项目,重新写一遍代码。

折中方案

重新新建一个项目,把不影响的那些代码复制过来,重新写一遍那些会影响到的代码。

–END–

### MyBatisPlus Mapper `selectList` 方法出现 `Invalid bound statement (not found)` 错误解决方案 当遇到 `MyBatisPlus` 的 `BaseMapper` 中的方法如 `insert`, `update`, 或者 `selectList` 出现 `Invalid bound statement (not found)` 错误时,通常是因为以下几个原因之一: #### 1. 数据源配置问题 如果项目使用了多个数据源并进行了自定义的数据源配置,则可能会影响 SQL Session Factory 的创建逻辑。这可能导致 MyBatis Plus 自动装配的基础组件未能正常初始化[^1]。 #### 2. 接口缺少泛型参数声明 对于每一个继承自 `BaseMapper<T>` 的接口来说,在其定义处应当指定具体的实体类作为类型参数。例如,假设有一个名为 `Usr` 的对象,则相应的映射器应该被定义为 `public interface UsrMapper extends BaseMapper<Usr> {}`。如果没有指明具体类型的泛型参数,那么即使实现了基本 CRUD 操作也可能会抛出异常[^2]。 #### 3. 返回值类型与实际查询结果不符 确保在编写 DAO 层代码时所使用的返回值类型要匹配数据库表结构以及 XML 文件内的 `<resultMap>` 或 `<resultType>` 设置。特别是当采用复杂的结果集映射规则时更需注意这一点。比如,如果期望获取的是一个列表形式的结果集合,那么相应的方法签名就应该设置成 `List<User>` 类型而不是其他单个实例的形式[^3]。 #### 4. 映射文件路径不一致 有时会由于 Mapper 接口与其对应的 XML 资源文件不在同一包名下而导致解析失败的情况发生。建议保持两者位于相同的位置或遵循框架默认约定来放置这些资源文件,从而减少潜在冲突的可能性。尝试调整它们到相同的目录中可以有效解决问题[^4]。 ```java // 正确的例子:带有泛型参数的 UserMapper 定义 public interface UserMapper extends BaseMapper<User> { // 可选地添加额外业务方法... } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值