初学Mybatis, 遇到了一个Invalid bound statement (not found)错误, 由此引发的猜想和解决办法, 原来是Idea的使用方式错误
遇到问题的思路
当时报的错是
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.crb.mapper.UserMapper.selectById
查了对应的namespace和id并没有错, 映射器扫描接口也没有写错包名, 然后我把映射器换成了指定名称, 结果测试类, 顺利通过了, 那么也就是说, 并不是找不到接口中的方法, 而是没有找到对应的配置.
查了好久, 还是不知道是哪错了, 无意中看到target目录, 我隐约知道, 是什么问题了
当时target目录结构如下
就是这样的, 两个看上去同名的两个文件夹, 竟然没有合并到一起(忽略有两个UserMapper.xml, 当时测试文件夹时备份到了那)
当时对比了两个文件夹名称, 一样鸭, 名称一模一样, 为什么不合并呢?
最后折腾了一上午, 我终于发现了问题所在.
再上两张图, 你们看一下有什么不同
下面这张是有问题的目录结构
下面这张是没有问题的目录结构
是的, 相信你已经看出来了. 引发这个问题的原因就是: 一开始resources目录下的文件夹全称叫 com.crb.mapper
也就是这是一个文件夹, 而不是三个, 当时我以为这是三个文件夹. 心累
解决办法
- 创建文件夹时候一层一层创建, 在resources下创建com, 然后在com下创建crb, 然后在crb下创建mapper(累死了有没有, 一个智能的IDE怎么会这样, 灵机一动, 我换了一种方式, 竟然好使, 开心)
- 创建文件夹的时候由原本的
com.crb.mapper
改成com/crb/mapper
这样问题就解决了
遇到问题, 还是需要多思考, 多去试试, 才能找到答案. 特此记录一下. Idea这个问题, 我搜了好多, 都没找到好的解决办法, 如果你有更好的, 欢迎留言.
详细的问题描述在这里:
https://blog.csdn.net/qq_34033853/article/details/91990551blog.csdn.net