mybatis相关问题合集(日常遇到问题逐步更新)



1.org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题解决

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.study.mapper.UserMapper.findAll

	at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:235)
	at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:53)
	at org.apache.ibatis.binding.MapperProxy.lambda$cachedInvoker$0(MapperProxy.java:108)
	at org.apache.ibatis.binding.MapperProxy$$Lambda$930/899736725.apply(Unknown Source)
	at org.apache.ibatis.util.MapUtil$$Lambda$664/1746458880.apply(Unknown Source)
	at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660)
	at org.apache.ibatis.util.MapUtil.computeIfAbsent(MapUtil.java:36)
	at org.apache.ibatis.binding.MapperProxy.cachedInvoker(MapperProxy.java:95)
	at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:86)
	at com.sun.proxy.$Proxy64.findAll(Unknown Source)
	at com.study.SpringbootSsmApplicationTests.testFindAll(SpringbootSsmApplicationTests.java:21)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:497)
	at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:725)
	at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
	at 

1.1 问题分析

我们首先来看报错详情,org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.study.mapper.UserMapper.findAll 是ibatis报错的错误,指无效的绑定语句(找不到)com.study.mapper.UserMapper.findAll方法;

1.2 路径问题导致

一般这类错误都是路径不对导致的问题,一般要关注俩个地方:
1. mapper接口文件(又被称为dao层)要和mapper.xml文件进行映射;
2. 配置文件指定Mybatis加载Mapper映射文件的路径要正确

mapper接口文件(又被称为dao层)和mapper.xml文件进行映射的定义是在mapper.xml文件中的namespace处进行指定的,检查此处指向的路径是否正确;
在这里插入图片描述

配置文件指定Mybatis加载Mapper映射文件的路径层级目录拼接一定要注意使用拼接符的使用,一般情况下使用/进行拼接:
在这里插入图片描述

但是我这里出现了一个特殊情况,目录结构创建时我本意是:mybatis/mappers/UserMapper.xml,但是IDEA在创建时认为其目录为mybatis.mappers/UserMapper.xml,也就是说我本意是想指定mybatis下还有一级目录mappers,但是IDEA认为你只创建了一个目录,它名字就叫mybatis.mappers;

这就导致项目启动时找不到对应目录报错,所以在有关路径方面数据,建议直接进行复制、粘贴,这样是最准确的:
在这里插入图片描述

当然如果路径正确,但是对应路径下没有对应的方法也会报这个错误;

1.3 编译.xml文件失败

Java程序是在虚拟机进行编译后运行的,有时候会出现main/java目录下的.xml不编译的情况,我们在target/classes目录下可以查看编译后的文件,检查.xml是否成功编译:
在这里插入图片描述

如果未编译的话,可以在pom.xml文件中添加下列内容:

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

添加后刷新Maven重启项目即可;

1.4 总结

mybatis是一个十分成熟的插件,一般不会有这么明显的BUG存在,所以报错大多情况下都是自定义相关内容的错误,如果上面内容排查完后还没有解决,那么相信我,一定是路径问题导致的,所以涉及路径相关的地方,全部使用直接复制目录路径的方式进行替换后重试;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值