Invalid bound statement (not found)错误解决办法

本文详细解析了在SpringBoot项目中整合MyBatis时可能遇到的问题及解决策略,包括配置错误、命名空间不匹配、方法未找到等常见错误,并提供了检查步骤和代码示例。

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

SpringBoot在整合mybatis的mapper文件时容易出现的一个问题。今天由于想把原先放在resource目录下的mapper目录放到java目录中,修改了下mapper路径,结果报出了这个该死的问题搞的我怀疑人生了。下面贴解决思路以及我的最终bug所在...

解决思路

1、检查配置文件中mapper文件配置的包路径是否正确

当然一般包路径配置都不会错,而我就死在这一步,前几天同产品组下有个同事改了我的配置,即

他给我的配置往后移了一位,导致mybatis的上级为spring,可想而知这些配置肯定不会生效,因此永远报找不到绑定的mapper文件...这种坑一时半会还不容易发现...真的想打人...

2、检查mapper文件中的namespace是否与对应接口的全路径一致

3、所调用dao层的方法是否有在对应mapper文件中存在

4、如果方法也存在,且该方法的返回是个List<自定义实体类>,检查返回的resultMap配置是否正确,或者仅配置了resultType

5、如果上述都没问题,检查编译后的目录中是否存在mapper文件,如果没有则在对应模块的pom中加如下依赖,告诉SpringBoot不要去忽略xml文件

    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

到此一般就解决成功了,当然今天在解决bug的过程中也信了玄学,比如mapper文件中删除一行空格再保存之类的...

我们打字员要坚信这世界是没有玄学的!!!越是玄学越是简单的bug!互勉!

2023/02/22更新:

修改一个外协项目时又遇到了这个熟悉的问题,这里补充两种解决方式:

1. 也是我这次遇到问题的罪魁祸首,不要使用 SqlSessionFactory,改用 MybatisSqlSessionFactory(一个引入了 Mybatis-plus 的工程竟然没有对应的配置项,框架真的害人,我真的是醉了)

@Bean
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception
    {
        String typeAliasesPackage = env.getProperty("mybatis.typeAliasesPackage");
        String mapperLocations = env.getProperty("mybatis.mapperLocations");
        String configLocation = env.getProperty("mybatis.configLocation");
        typeAliasesPackage = setTypeAliasesPackage(typeAliasesPackage);
        VFS.addImplClass(SpringBootVFS.class);

        final MybatisSqlSessionFactoryBean sessionFactory = new MybatisSqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource);
        sessionFactory.setTypeAliasesPackage(typeAliasesPackage);
        sessionFactory.setMapperLocations(resolveMapperLocations(StringUtils.split(mapperLocations, ",")));
        sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(configLocation));
        // 设置分页插件
        sessionFactory.setPlugins(mybatisPlusInterceptor());
        // 设置自动注入配置
        GlobalConfig globalConfig = GlobalConfigUtils.defaults();
        globalConfig.setMetaObjectHandler(myMetaObjectHandler);
        sessionFactory.setGlobalConfig(globalConfig);
        return sessionFactory.getObject();
    }


2. 检查新加的 mapper 接口是否有被扫描到,即关注下有无 @MapperScan 注解,若有则注意新加的是否在规定的包范围内;若无则需要手动加上 @Mapper 接口

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清茶_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值