一、问题概述
最近在用SpringBoot 多模块 集成mybatis,模块A 依赖于模块B, 模块A 和模块B 各自有各自的业务逻辑和mapper 文件,模块A 的mapper xml 文件存放在resource 下的 mybatisMapper 文件夹,模块B 的mapper xm 文件存放在 B 模块的resource 下的 mapper 文件夹, 打包时以A 模块为主,B 以jar 包方式被A 依赖。当SpringBoot 应用启动时,一直 报错
.BindingException: Invalid bound statement (not found):
二、问题分析
mybatis 是一个重要的持久化框架,只要通过sql 就可以实现数据的增删改查,原理本质上是通过mapper 接口层和 xml 文件做对应,xml 里的namespace 对应包名,方法对应mapper 接口里的方法名。
特别注意两点:
1. mapper 接口的文件名默认要和xml 的文件名保持一致
2. mapper xml 文件所在包路径要和mapper 接口文件在同一包下,如果不在同一包下,则需要从yml 里面进行配置mapper-locations
例如:
mybatis:
mapper-locations: classpath:mybatisMapper/*Mapper.xml
但要注意一点: 如果A 模块依赖B 模块,A 为启动类,B模块里面有自己的xml ,则要想实现A 能访问到B 模块下xml 则需要在A 模块下做如下配置:
mybatis:
mapper-locations: classpath:mybatisMapper/*Mapper.xml, classpath*:apper/*Mapper.xml
classpath 和 classpath 区别: classpath:只会到你的class路径中查找找文件; classpath:不仅包含class路径,还包括jar文件中(class路径)进行查找.**