在ibatis中传递和返回自定义数组对象,在java中传递和返回oracle

Jus*_*tin 7 java oracle ibatis

我环顾四周寻找一个很好的例子,但我还没有碰到一个.我想使用IBATIS框架将自定义字符串数组从java传递到oracle并返回.有没有人有一个很好的链接到一个例子?我正在调用IBATIS的存储过程.

谢谢

小智 2

您必须从 的自定义实例开始TypeHandler。我们更愿意实现更简单的TypeHandlerCallback,但在这种情况下我们需要访问底层Connection

public class ArrayTypeHandler implements TypeHandler {

    public void setParameter(PreparedStatement ps, int i, Object param, String jdbcType)
            throws SQLException {
        if (param == null) {
            ps.setNull(i, Types.ARRAY);
        } else {
            Connection conn = ps.getConnection();
            Array loc = conn.createArrayOf("myArrayType", (Object[]) param);
            ps.setArray(i, loc);
        }
    }

    public Object getResult(CallableStatement statement, int i)
            throws SQLException {
        return statement.getArray(i).getArray();
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

然后,将其连接到 iBATIS 配置中:

<?xml version="1.0"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">

<sqlMap namespace="arrayTest">

    <parameterMap id="storedprocParams" class="map">
        <parameter property="result" mode="OUT" jdbcType="ARRAY" typeHandler="ArrayTypeHandler"/>
        <parameter property="argument" mode="IN" jdbcType="ARRAY" typeHandler="ArrayTypeHandler"/>
    </parameterMap>

    <procedure id="storedproc" parameterMap="arrayTest.storedprocParams">
        {? = call My_Array_Function( ? )}
    </procedure>

</sqlMap>
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!