ibatis:There is no statement named insertComment in this SqlMap

问题

在ibatis的sqlmap配置文件中配置了一个存储过程,存储过程的参数用了一个parameterMap来定义。但是调试时报错“There is no statement named insertComment in this SqlMap”。

分析

id肯定没拼错;sqlmap.xml里肯定配置了对应的语句;但是还是会报这个莫名其妙的错误。
后来发现,出错原因很啼笑皆非:我在sqlmap里,是先写了存储过程的定义,然后写的参数的定义。也就是说,我是这样写的:

<procedure id="dataFilter" parameterMap="dataFilterResult">……
<parameterMap class="java.util.HashMap" id="dataFilterResult">……

解决

后来改成先写参数后写存储过程,就是这样:

<parameterMap class="java.util.HashMap" id="dataFilterResult">……
<procedure id="dataFilter" parameterMap="dataFilterResult">……

就没问题了。

看来,ibatis对sqlmap配置的解析是解释型的,读取一段解析一段;而不是先把全部配置读取完毕后再整体进行解析。