解决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文件都已经打包完成,再次项目功能正常跑通。

相关文章
|
21天前
|
XML Java 数据库连接
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):XXXXX
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):XXXXX
|
1月前
|
XML Java 数据库连接
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.example.forum.d
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.example.forum.d
26 1
|
14天前
|
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
21 0
|
15天前
|
监控 大数据 Java
使用Apache Flink进行大数据实时流处理
Apache Flink是开源流处理框架,擅长低延迟、高吞吐量实时数据流处理。本文深入解析Flink的核心概念、架构(包括客户端、作业管理器、任务管理器和数据源/接收器)和事件时间、窗口、状态管理等特性。通过实战代码展示Flink在词频统计中的应用,讨论其实战挑战与优化。Flink作为大数据处理的关键组件,将持续影响实时处理领域。
116 5
|
1月前
|
消息中间件 Java Kafka
实时计算 Flink版操作报错之Apache Flink中的SplitFetcher线程在读取数据时遇到了未预期的情况,该怎么解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
29天前
|
数据处理 Apache 流计算
|
1月前
|
消息中间件 关系型数据库 MySQL
Apache Flink CDC 3.1.0 发布公告
Apache Flink 社区很高兴地宣布发布 Flink CDC 3.1.0!
584 1
Apache Flink CDC 3.1.0 发布公告
|
16天前
|
数据采集 关系型数据库 MySQL
使用Apache Flink实现MySQL数据读取和写入的完整指南
使用Apache Flink实现MySQL数据读取和写入的完整指南
116 0
使用Apache Flink实现MySQL数据读取和写入的完整指南
|
20天前
|
消息中间件 Kafka 数据处理
Apache Flink:流式数据处理的强大引擎
【6月更文挑战第8天】Apache Flink是开源的流处理框架,专注于高效、低延迟的无界和有界数据流处理。它提供统一编程模型,支持实时与批量数据。核心概念包括DataStreams、DataSets、时间语义和窗口操作。使用Flink涉及环境设置、数据源配置(如Kafka)、数据转换(如map、filter)、窗口聚合及数据输出。通过丰富API和灵活时间语义,Flink适于构建复杂流处理应用,在实时数据处理领域具有广阔前景。
|
3天前
|
消息中间件 分布式计算 Kafka
深度分析:Apache Flink及其在大数据处理中的应用
Apache Flink是低延迟、高吞吐量的流处理框架,以其状态管理和事件时间处理能力脱颖而出。与Apache Spark Streaming相比,Flink在实时性上更强,但Spark生态系统更丰富。Apache Storm在低延迟上有优势,而Kafka Streams适合轻量级流处理。选型考虑延迟、状态管理、生态系统和运维成本。Flink适用于实时数据分析、复杂事件处理等场景,使用时注意资源配置、状态管理和窗口操作的优化。

推荐镜像

更多