使用MyBatis映射时遇resultMap XML校验错误,请求排查解决
解决MyBatis resultMap元素顺序不匹配的报错
嘿,这个问题我太熟悉了!你碰到的是MyBatis对resultMap内部子元素的严格顺序校验问题。
错误原因
MyBatis的XML映射文件里,resultMap的子元素必须严格遵循固定顺序:constructor → id → result → association → collection → discriminator
哪怕你不需要其中某些元素,剩下的元素也得按这个顺序排列,否则XML解析器就会抛出你看到的“内容必须匹配”的错误。
你的代码排查
你贴的qMap里全是result元素,这部分是符合要求的,但未写完的itemsMap大概率是混了其他元素(比如association或collection)却没按顺序放置——比如把association放在了result前面,或者把id放在了result之后。
修复方案
调整resultMap内子元素的顺序,严格遵循规则。举个正确的示例:
<resultMap id="itemsMap" type="xxx.model.Items"> <!-- 优先放id元素(如果有主键映射) --> <id column="item_id" property="id"/> <!-- 然后是普通result字段映射 --> <result column="item_name" property="name"/> <result column="item_desc" property="description"/> <!-- 最后放关联元素association/collection --> <collection property="tags" ofType="xxx.model.Tag"> <id column="tag_id" property="id"/> <result column="tag_name" property="name"/> </collection> </resultMap>
如果你的resultMap里没有constructor、id这类元素,直接从result开始写也完全没问题,只要保证后续添加其他元素时不打乱顺序就行。
内容的提问来源于stack exchange,提问作者Aliaksandr
相关产品推荐
相关产品推荐

