我遇到的问题与我在此处发现的问题类似(或完全相同): How to map query for iBATIS with parameterized column in select clause? 但那里给出的答案似乎对我不起作用 我有以下内容:
<typeAlias alias="resultado" type="java.lang.String"/>
<typeAlias alias="parametro" type="java.util.Map"/>
<select id="getValorVariable" resultClass="resultado" parameterClass="parametro">
SELECT $campo$ FROM $tabla$
WHERE $campoClave$ = #valorClave#
</select>
第一次执行选择时,它可以正常工作。 $ campo $的值为'CIF'。第二次运行时,它应该具有值'FECHA'但它保持'CIF'。在调用select的函数中,我检查map及其值,并且它具有正确的值。
有什么想法吗?谢谢你的帮助。
答案 0 :(得分:2)
您遇到此问题,因为除了参数值之外,iBatis预编译整个查询。这些是在查询运行时动态添加的。因此,第一次运行查询时,它会使用SELECT
语句中的列名进行预编译。
添加
remapResults="true"
到您的<select>
代码。
它应该是这样的:
<select id="getValorVariable" resultClass="resultado" parameterClass="parametro" remapResults="true">
此外,在<sqlMapConfig>
中将此添加到<settings>
标记:
statementCachingEnabled="false"