开门见山
首先问题描述:
SpringBoot启动时报的问题:org.apache.ibatis.binding.bindingexception: invalid bound statement (not found): com.moxi.mapper.filmmapper.findfilmbylimitpage。
简单解释一下问题:什么意思呢?这个问题是说没有找到filmmapper
所对应的 Filmmapper.xml
文件,可能就是映射,路径配置有问题。
首先应该考虑的是Mapper是否映射成功,这个思路完全是没有问题的,正确的,但是呢,我的错都不是常规的的错误。
常规的错误我就不赘述了,参考一下几位大佬的解决方案基本能解决,我主要描述我的问题。
解决通道
超全超详细解读,mybatis报org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)错误
其实在这一篇文章中最后改文件夹的方法是能够解决我的问题的。解决完之后,我再想为什么,难道Mybtis中版本对resource下的Mapper获取路径有变化,可能有的版本是不一样的,源码我就不解读了,但是我的问题不是源码的问题。
以上三篇大佬的文章已经基本能解决大部分问题啦。
我的问题
我的问题根源是路径有问题,但不是配置的问题,配置一切正常,包括yml中mybatis
的配置、@MapperScan
的Mapper包扫描配置。我的问题是IDEA
在resource文件夹中创建文件夹的问题,这够奇葩吧!
mybatis:
type-aliases-package: com.moxi.bean
mapper-locations: classpath:com/moxi/mapper/**/*.xml
@MapperScan(basePackages = {"com.moxi.mapper"})
上我的文件目录结构:(自动忽略画了红线的文件夹)
从配置上来说没有问题吧!一切正常吧!
好,现在我开始展示一个图片:
现在我提问:“这两个个文件夹是不是一样的呢”?
IDEA
里从视觉上看是一样的,名字相同,但是我们都知道,不可能在同一个文件夹下有相同名称的文件夹的(首选我没有使用所谓的隐藏符号),所以它们是不同的文件夹,然我就在这上面栽跟头了。
下面,我揭秘:
移动文件夹1
重命名文件目录1
重命名文件夹2
所以你注意到区别了吗?一个是文件夹的子文件夹,另一个是一个文件夹。IDEA
给展示的视觉效果是一模一样的。
所以我是怎么创建出第二个文件夹呢?
在Java文件下创建一个类时就可以直接com.moxi.Test
这样连包带类或者只是连包的创建文件夹。所以我的惯性直接在resource下. .
的去创建文件夹,创建完看着没有丝毫问题,还是我去找直接用maper
文件夹就行,我这样不行的原因才发现的。说一下这样的解决方法吧,IDEA
里在resource中一次创建多层文件夹用/
。
声明一下直接用mapper文件夹是可以的,只是在创建相同的Java目录下的文件包是一种规范约束,会好一些。
吐槽
真的还是不够大标准化,Java中“.”
表示一级包,当然Javah中叫做包,实际上还不是文件夹,所以本质无区别。其次,这IDEA
文件夹展示的这个功能,我一直觉得做的很烂,点点的就不能做个分层展示的功能吗,这不是对项目更清晰明了些。