解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)异常

简介: 解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)异常

解决org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)异常

1、问题描述

今天在把普通的SpringBoot项目改造成SpringBoot微服务分布式架构项目的时候遇到一个问题:

image-20230815092849732

前端项目运行时显示500错误,无法显示,于是来到后台查看报错

消费者端如下:

image-20230815093614611

提供者端:

image-20230815093715439

具体报错:

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.team.news.mapper.NewsDetailMapper.selectByExample
    at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:235) ~[mybatis-3.5.1.jar:3.5.1]
    at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:53) ~[mybatis-3.5.1.jar:3.5.1]
    at org.apache.ibatis.binding.MapperProxy.lambda$cachedMapperMethod$0(MapperProxy.java:62) ~[mybatis-3.5.1.jar:3.5.1]

我只复制了关键几行,其中指出问题的是:

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.team.news.mapper.NewsDetailMapper.selectByExample

大概意思就是:错误绑定(没有找到):com.team.news.mapper.NewsDetailMapper.selectByExample

说我的NewsDetailMapper.selectByExample类中并没有找到selectByExample方法。

2、解决思路

一般网上会提供几种解决方案:

1、xml文件名与mapper接口名不一致

image-20230815094728972

一致,排除

2、xml文件中namespace与mapper接口的类名不一致

<mapper namespace="com.team.news.mapper.NewsDetailMapper">

可以看到,是一致的,排除

3、xml文件中的方法名和mapper接口方法名不一致

image-20230815095205412

点插件的这个图标,跳转到xml文件中的对应的映射:

<select id="selectByExample" parameterType="com.team.news.entity.NewsDetailExample" resultMap="BaseResultMap">
    select
        <if test="distinct">
              distinct
        </if>
        'false' as QUERYID,
        <include refid="Base_Column_List" />
            from news_detail
        <if test="_parameter != null">
              <include refid="Example_Where_Clause" />
        </if>
        <if test="orderByClause != null">
              order by ${orderByClause}
        </if>
</select>

id,parameterType,包括resultMap都检查完毕后,没有问题

4、在主启动类上没有标注@MapperScan或在mapper接口类上没有标注@Mapper

首先声明这两个注解不能同时使用,用一个就够了,查看我的启动类:

@SpringBootApplication
@EnableDiscoveryClient
@EnableTransactionManagement
@MapperScan(value = "com.team.news.mapper")
public class NewsProviderApplication {
   
   

    public static void main(String[] args) {
   
   
        SpringApplication.run(NewsProviderApplication.class, args);
    }

}

注解也是存在的,并且路径也是正确的

那么,接下来,问题出在哪儿呢?基本上已经把能排除的都排除了。依旧是这个问题。

接下来是我的解决方案,感觉也是最容易被忽略的部分:

5、在pom文件中添加相关资源类打包配置

之后我鼓捣了一下午,猛然在以前的一个项目里看到了pom文件中的一个配置:

<build>
    <!--配置相关的资源进行打包-->
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.xml</include>
            </includes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.*</include>
            </includes>
        </resource>
    </resources>
</build>

这是将包下的xml资源和resources包下的配置类文件进行对应打包,并将其编译成为.class运行文件

于是我查看了我的mapper工程:

image-20230815100039766

打开这个target=>classes:

image-20230815100124067

在mapper包下果然只看到了两个mapper类,并没有看到对应的xml文件,那么在运行时检测不到对应映射的xml文件,自然找不到对应的方法了。

于是我在该工程下的pom文件中添加:

<build>
    <!--配置相关的资源进行打包-->
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.xml</include>
            </includes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <includes>
                <include>**/*.*</include>
            </includes>
        </resource>
    </resources>
</build>

再次运行,再打开target=>classes=>mapper:

image-20230815100533718

可以看到所有的xml文件都已经打包完成,再次项目功能正常跑通。

相关文章
|
3月前
|
Java 数据库连接 mybatis
Request processing failed; nested exception is org.apache.ibatis.binding.BindingException: Invalid
Request processing failed; nested exception is org.apache.ibatis.binding.BindingException: Invalid
|
4月前
|
XML Java 数据库连接
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):XXXXX
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):XXXXX
|
4月前
|
Java 数据库连接 mybatis
【已解决】nested exception is org.apache.ibatis.binding.BindingException: Parameter ‘qcBizname‘ not found
【已解决】nested exception is org.apache.ibatis.binding.BindingException: Parameter ‘qcBizname‘ not found
106 0
|
2月前
|
存储 消息中间件 Java
Apache Flink 实践问题之原生TM UI日志问题如何解决
Apache Flink 实践问题之原生TM UI日志问题如何解决
36 1
|
25天前
|
SQL 消息中间件 关系型数据库
Apache Doris Flink Connector 24.0.0 版本正式发布
该版本新增了对 Flink 1.20 的支持,并支持通过 Arrow Flight SQL 高速读取 Doris 中数据。
|
2月前
|
消息中间件 监控 数据挖掘
基于RabbitMQ与Apache Flink构建实时分析系统
【8月更文第28天】本文将介绍如何利用RabbitMQ作为数据源,结合Apache Flink进行实时数据分析。我们将构建一个简单的实时分析系统,该系统能够接收来自不同来源的数据,对数据进行实时处理,并将结果输出到另一个队列或存储系统中。
108 2
|
2月前
|
消息中间件 分布式计算 Hadoop
Apache Flink 实践问题之Flume与Hadoop之间的物理墙问题如何解决
Apache Flink 实践问题之Flume与Hadoop之间的物理墙问题如何解决
37 3
|
2月前
|
消息中间件 运维 Kafka
Apache Flink 实践问题之达到网卡的最大速度如何解决
Apache Flink 实践问题之达到网卡的最大速度如何解决
36 2
|
2月前
|
消息中间件 前端开发 Kafka
【Azure 事件中心】使用Apache Flink 连接 Event Hubs 出错 Kafka error: No resolvable bootstrap urls
【Azure 事件中心】使用Apache Flink 连接 Event Hubs 出错 Kafka error: No resolvable bootstrap urls
|
17天前
|
消息中间件 资源调度 API
Apache Flink 流批融合技术介绍
本文源自阿里云高级研发工程师周云峰在Apache Asia Community OverCode 2024的分享,内容涵盖从“流批一体”到“流批融合”的演进、技术解决方案及社区进展。流批一体已在API、算子和引擎层面实现统一,但用户仍需手动配置作业模式。流批融合旨在通过动态调整优化策略,自动适应不同场景需求。文章详细介绍了如何通过量化指标(如isProcessingBacklog和isInsertOnly)实现这一目标,并展示了针对不同场景的具体优化措施。此外,还概述了社区当前进展及未来规划,包括将优化方案推向Flink社区、动态调整算子流程结构等。
279 31
Apache Flink 流批融合技术介绍

推荐镜像

更多
下一篇
无影云桌面