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

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

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

     <include refid="B.where_1" />

结果报错:

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引用了<include refid="where_2" />,原来是在引用的时候没有加前缀,改成<include refid="B.where_2" />这样就可以了.


最终是这样的:

A文件:

    <select id="getCount" resultMap="BaseResultMap">
        select count(*)
        from X a

     <include refid="B.where_1" />

</select>
  

B文件:

<sql id="where_1">
where a.id =#{id,jdbcType=VARCHAR}

      <include refid="B.where_2" />     

</sql>

<sql id="where_2">

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

</sql>

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



  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值