mybatis通配符引用报错的问题XML fragments parsed from previous mappers does not contain value

写mapper A的时候,发现内容太长,于是把被引用的refid单独抽出来成为一个新的mapper文件,A中只保留了直接对外的接口申请了,于是就有了mapper B 文件。

在A文件里面引用B的sql,如:

    

结果报错:

org.apache.ibatis.builder.IncompleteElementException: Could not find SQL statement to include with refid 'A.where_2'
at org.apache.ibatis.builder.xml.XMLIncludeTransformer.findSqlFragment(XMLIncludeTransformer.java:104)
at org.apache.ibatis.builder.xml.XMLIncludeTransformer.applyIncludes(XMLIncludeTransformer.java:64)
at org.apache.ibatis.builder.xml.XMLIncludeTransformer.applyIncludes(XMLIncludeTransformer.java:87)
at org.apache.ibatis.builder.xml.XMLIncludeTransformer.applyIncludes(XMLIncludeTransformer.java:75)
at org.apache.ibatis.builder.xml.XMLIncludeTransformer.applyIncludes(XMLIncludeTransformer.java:87)
at org.apache.ibatis.builder.xml.XMLIncludeTransformer.applyIncludes(XMLIncludeTransformer.java:48)
at org.apache.ibatis.builder.xml.XMLStatementBuilder.parseStatementNode(XMLStatementBuilder.java:88)
at org.apache.ibatis.session.Configuration.buildAllStatements(Configuration.java:760)

Caused by: java.lang.IllegalArgumentException: XML fragments parsed from previous mappers does not contain value for A.where_2
at org.apache.ibatis.session.Configuration$StrictMap.get(Configuration.java:860)
at org.apache.ibatis.builder.xml.XMLIncludeTransformer.findSqlFragment(XMLIncludeTransformer.java:101)
... 69 more


后来发现 B文件中B.where_1引用了,原来是在引用的时候没有加前缀,改成这样就可以了.


最终是这样的:

A文件:

   

  

B文件:


where a.id =#{id,jdbcType=VARCHAR}

      B.where_2" />     



a.name =#{name,jdbcType=VARCHAR}

B文件最开始where_1中引用where_2时没有加B.的前缀,所有报错了。原来where_1在引入到A文件后,直接把where_2也引用过去了,然后相当于是A文件引用的where_2.



你可能感兴趣的:(mybatis,通配符,XML,fragments,parsed,namespace,include,问题积累)