如何 mybatisplus 项目中覆盖 jar 中的 mapper.xml 文件
## 覆盖 jar 中的 mapper.xml 文件
mybatis plus 里的 xml 文件,如何本地工程里的覆盖 jar 里的 mapper.xml 。
class 文件可以在相同路径写个同名的,就能覆盖 jar 里对应的 class 。mapper.xml 文件如何覆盖 jar 里对应的呢。
没人会吗
为啥要这样搞?解压缩出来再运行呢?
两个思路
- mapper.xml 最后还是要对应到 mapper Interface ,所以应该覆盖 interface 就行了
想办法让 jar 包里的 mapper.xml 不生效,能生效是因为在 mapperScan 的范围内。如果 jar 包里有自动配置让 jar 包内 mapperScan 生效就禁掉对应 bean 的加载;如果没有自动配置直接修改本地工程的 mapperScan 排除 jar 包内(不过不太确定 mapperScan 能不能扫到 jar 内)
factoryBean.setMapperLocations 不是可以指定 mapper.xml 的路径么?
想覆盖 jar 里 xml 里的功能,由本地自定义
不会没关系,谢谢
可以扫到,目前相当于扫到两次 xml 文件了,导致 bean 冲突。不清楚具体怎么操作
目前能想到的方案:
- 、解压 jar 修改 xml 后再打包回去,比较麻烦
、同路径写一个 xml ,放到 java 路径,目前未生效。
说起来之前遇到个奇奇怪怪的 bug ,一个项目里面有两个模块都有独立的 mapper 类和 mapper xml 文件。他们的包路径不一样,mapperLocations 配置如下:
classpath:mybatis/module2/*.xml classpath:mybatis/module1/*.xml
奇怪的是有时候,这两个位置的 xml 都能正确的加载并且和 mapper 接口映射上。
但是有时候你可能重启一次电脑,这两个路径的 xml 就只有一个能被正确加载映射了。
查询的时候调用对应方法就会提示 无效的绑定。 我至今没找到问题所在,有时候 maven 重新加载一次就又好了#9 这很常见,不是 bug 。jar 被加载的顺序本来就是不固定的,类也是。
主要是哪怕顺序不一致 也不应该是有时候两个模块的 xml 都能被加载,有时候却又只能加载其中一个模块的 xml 。
资源可能是随机引入的,可能相互间会发生覆盖,漏应该不至于。
还真的是漏了, 因为模块 1 和模块 2 都是只有 mapper 接口类和 xml , 这两的 jar 包都是通过引入到模块 3 来起服务的。而模块 1 和模块 2 操作的都是不同的表也不是同名的,不会有覆盖的问题,但是就经常出现上述问题。有时候只会引入模块 1 的文件,有时候只有 2 。有时候开发环境有这个问题,但是生产环境又没事。这玩意真是莫名其妙的,去源码打断点找了一下午没找到原因所在。
我猜你用的盗版插件
#13 要定位也简单。如果不是经常复现,就写给类把 Mybatis 的配置类 Bean 装配到进去,每次启动打印一下完成的 Mybatis 运行时配置详情,写到日志里,几次输出就能定位了。如果出现频率稍高,几次启停就能出现一次,直接打断点,看一下运行时的 mapper 实例,到底注册的是什么玩意就行了。
接口重写方法就行,hook 掉也可以
怎么操作呢
接口注释覆盖 xml ,这个我忘记优先级是哪个了。或者开个代理 hook 掉 xml 资源加载返回的路径,看下 springaop 的源码怎么玩的,但是你要做的是用 aspectj 。
Maven 多模块项目的扫描路径需以
classpath*
:开头(即加载多个 jar 包下的 XML 文件)是不是需要加*他这个的确只能从 spring 的生命周期入手,不然肯定冲突
目前公司小型部门团队,需要做个统一的文档管理方案,以下是目前需要的一些使用场景需求:1 、支持 wiki 知识库(markdown),用于整理一些软件部署和使用的文档;2 、支…
面试官:在电商支付系统中,如何有效避免用户重复支付?请详细阐述你的设计思路。 应试者:防止重复支付是电商支付系统的核心设计挑战之一。我的解决方案主要从以下几个维度考虑: 唯一性…
我目前家里的地暖有一个温控面板,可以通过手机 app 远程控制( wifi ),但是这个 app 感觉有点粗糙,经常性会出现预设的配置加载不出来,手机上的设置无法在短时间内下达…