持久化调用函数:
public double precisionFlter(int sensorid, double srcValue) {
Map<String, Object> paraMap = new HashMap<String, Object>();// 参数
paraMap.put("sensorid", sensorid);
paraMap.put("srcValue", srcValue);
double dou = 0.0;
try {
dou = (Double) getSqlMapClientTemplate().queryForObject(
"Analysis.precisionFlter", paraMap);
} catch (DataAccessException e) {
e.printStackTrace();
log.error("精度过滤(precisionFlter)出错");
}
return dou;
}
sqlMap:
<!-- 精度过滤 通过自定义函数fun_precision_filter获取精度过滤后的值 -->
<parameterMap id="precisionFlter-param" class="java.util.HashMap">
<parameter property="sensorid" />
<parameter property="srcValue" />
</parameterMap>
<select id="precisionFlter" parameterMap="precisionFlter-param"
resultClass="java.lang.Double">
<![CDATA[
SELECT fun_precision_filter(?,?)
]]></select>
如果按上述调用,第一次调用不会出错,但是第二次调用就会报错。据我分析,可能是缓存的问题,第一次调用的时候,比如传入的值为(32,12.5432),则会ibatis会记住“fun_precision_filter(32,12.5432)”列名,第二次调用的时候,还是会找这个列明,所以会报错。修改很简单,只用把列名做个别名就好:
SELECT fun_precision_filter(?,?) as fun 问题解决!