在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">……
就没问题了。
后来发现,出错原因很啼笑皆非:我在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配置的解析是解释型的,读取一段解析一段;而不是先把全部配置读取完毕后再整体进行解析。
本文转自 斯然在天边 51CTO博客,原文链接:http://blog.51cto.com/winters1224/797946,如需转载请自行联系原作者