Spring Mybatis - 将数组作为输入参数发送到mapper.xml中的过程调用

时间:2013-04-12 17:28:18

标签: spring mybatis

我正在使用以下代码将java数组传递给存储过程

<select id="abcd" parameterType="java.util.Map" statementType="CALLABLE">
    {call PKG_xyz.PR_cbcd(
        #{p_array,jdbcType=ARRAY,typeHandler=org.apache.ibatis.type.ArrayTypeHandler,mode=IN},
        #{p_ids,jdbcType=INTEGER,mode=IN},
        #{p_comments,jdbcType=VARCHAR,mode=IN},
        #{p_return_code,jdbcType=INTEGER,mode=OUT},
        #{p_msg_out,jdbcType=VARCHAR,mode=OUT}   
    )}
</select>

这里,p_array是我的java数组。但我收到以下错误 - &gt; “使用JdbcType ARRAY为参数#1设置null时出错。尝试为此参数设置不同的JdbcType或不同的jdbcTypeForNull配置属性。原因:java.sql.SQLException:列类型无效:sqlType = 2003

有人可以帮忙......

提前致谢...

1 个答案:

答案 0 :(得分:2)

尝试编写自定义TypeHandler,如

public class ArrayTypeHandler implements TypeHandler<YourArrayObject[]>{
}

重写此方法以将oracle.sql.ARRAY设置为PreparedStatement: -

public void setParameter(PreparedStatement ps, int i,
            YourArrayObject[] parameter, JdbcType jdbcType) throws SQLException {}

这个网址可能会帮助你做同样的事情: - How to Pass Java List of Objects to Oracle Stored Procedure Using MyBatis?

同样,重写getResult()方法以获取OUT数组参数