在使用mybatis-plus时,我通过<include>引用外部的xml的sql数据。然后就出现了一下的报错:

Caused by: java.lang.IllegalArgumentException: XML fragments parsed from previous mappers does not contain value for com.****.BaseInfo

BaseInfo就是定义在其他xml的<sql>的id。

我的代码绝对没有问题(解决问题之后我才坚信这一点)。网上有很多答案,什么版本啊,id重复了,id对不上。但是我的都不是。

我的问题是mybatis-plus的解析<include>的逻辑要晚于解析<select>等节点。虽然我不知道对不对,但是就我的发现大概时这样的

所以如果我们执行查询语句时会导致他解析不到<include>中的外部引用。这里我发现只要开始执行语句就会扫描扫描所有的mapper.xml。所以即便我们执行的语句中不包含<include>。也会有问题。但是如果我们<include>的语句是在同一个<sql>下就没有问题。

而我的代码是在@PostConstruct注解中执行sql查询。所以有问题。我试了一下,如果试实现ApplicationContextAware的类也不能执行

以上是我的发现。具体为社么不想再看了,这个问题纠结了我一天多,烦!!!!!

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐