故事的起源
由于多个模块共用mybatis的mapper,即想着将公共部分提取到一个公共模块。
故事的发展过程
1.首先创建公共模块fd-common
2.创建好mapper.java所在路径 com.fd.dao
TestMapper.java
3.创建好mapper.xml所在路径 com.fd.xml
TestMapper.xml
4.配置好spring cloud config中的mapper.xml扫描路径
5.配置springboot中的@MapperScan(backpages="com.fd.dao")
故事发生转折
按照以上步骤设置好,美好的故事应该是程序正常启动并在service中能正常使用TestMapper,但是,很不幸的是它不按我的剧本走。启动不报错,调用service时出现了以下错误信息:
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.fd.dao.TestMapper.selectOrgCode
头发都掉光了
从错误的信息能看出肯定是mapper.java和mapper.xml没有绑定上,于是各种查看配置信息(包路径与扫描路径是否一致等等等),发现没有一点问题,然后就想着说,把这个TestMapper放在其它模块(之前能找到mapper映射关系的模块)上试一试,发现没有问题,这让我的头发更离谱的掉了。找同事也没有发现问题的出处。。。于是纠结中。。。
这锅Idea你背吧
不知道是不是被上天眷顾,突然的一个灵感涌入脑海。那就是查看了一下target里面的文件目录,
童鞋们,有没有发现什么问题呢?
原来是包目录创建的有问题。。。 按照扫描路径com/fd/xml来说的话,图4的目录结构应该要和图5所示一致才行。
此刻在进行测试,发现没有问题了。这个锅我就丢给idea创建目录了哈哈哈
故事的总结
创建目录的时候要一个文件夹一个文件夹的创建,不能直接创建 com.fd.xml这个文件夹,虽然看上去和一个文件夹一个文件夹的创建是一样的展示。但是发现实际的目录接口是有非常大的差别的。