栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MyBatis:[Invalid bound statement (not found)],接口找不到对应的执行语句

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MyBatis:[Invalid bound statement (not found)],接口找不到对应的执行语句

背景:以往开发都是单体项目集群部署,项目是垂直结构的,所有需要的配置文件、资料的加载都是直接通过yml或者parpreties文件直接声明加载路径的,随着业务范围的扩大,领导要求把项目改成水平结构的,以此提供给用户更多的选择范围,同时也使项目变得更加容易维护,并在一定程度上提升项目的性能。

问题:我这边是把项目拆成了九个模块(这是在忽略消费者模块的情况下)(六个应用、一个配置、一个静态资源、一个api调用),采用dubbo+zk的形式分布式开发项目,这样我这边就能根据用户的需要只部署对应的应用模块即可。结构如下(部分消费者模块未加入)

由于项目中使用了shiro,并且在大量的模块中都存在权限管理,因此考虑把shiro从各个应用模块中抽取出来,放在config模块中,所有的应用模块都将config模块引入,而shiro在认证和授权的过程中需要调用数据库。这样就出现了一个问题:config模块需要引入mapper配置,而其他应用模块也需要引入mapper,而config模块作为配置模块,本身不能够扫描xml文件,既然无法扫描xml文件,那也就无法与mapper接口进行匹配。如果将shiro需要的mapper层接口放在应用模块,那么就需要在config模块引用对应的应用模块,势必会造成循环依赖。

解决方案:这种问题其实都是属于初级问题,我这边首先检查了以下三点。

1、接口与xml文件名是否一致

2、xml文件对应的namespace是否与接口路径一致

3、注解@MapperScan是否扫描到了接口层,或者接口是否添加了@Mapper注解(注意这个注解对应的包)

4、xml文件是否被加载到

这边问题主要就是出在第四点上了,由于config模块本身不会扫描xml文件,所以加载xml文件的工作在应用模块,因此应用模块在加载xml路径时要把本模块以及配置模块的xml文件全部扫描加载。

下面做个示例

mybatis:
  mapper-locations: classpath:mapper/*Mapper.xml,classpath*:/mapper/*.xml
  type-aliases-package: com.example.demo.entity

注意:其他模块的mapper文件夹前面需要加/,因为他并不是和本项目同级。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/732014.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号