我用Mybatis3做过,应该和旧的iBatis的东西类似。要获取 JDBC 内容,请阅读这个线程 http://asktom.oracle.com/pls/asktom/f?p=100:11:0%3a%3a%3a%3aP11_QUESTION_ID:3696816290928。这是一条巨大的线索,但它就在那里。查找“ArrayDescriptor”。
基本上,您需要编写一个 TypeHandler。在 TypeHandler 中,调用 setArray。 mybatis 3.x 中应该是这样的。您使用列表时,只需使用 toArray 方法进行转换。这是一个示例,其中参数是 String[]。
import oracle.sql.ARRAY;
import oracle.sql.ArrayDescriptor;
.....
public void setParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException
{
//null check?
ArrayDescriptor desc = ArrayDescriptor.createDescriptor("STRARRAY ", ps.getConnection());
ARRAY oracleArray = new ARRAY(desc, ps.getConnection(), parameter);
ps.setArray(i, oracleArray);
}
也许在 ibatis 中是这样的,
public void setParameter(ParameterSetter setter, Object parameter) throws SQLException
{
ArrayDescriptor desc = ArrayDescriptor.createDescriptor("STRARRAY", setter.getPreparedStatement().getConnection());
ARRAY oracleArray = new ARRAY(desc, setter.getPreparedStatement().getConnection(), parameter);
setter.setArray(oracleArray);
}
让你已经构建了一个类型,就像该线程中所说的那样。
i.e.
CREATE OR REPLACE TYPE STRARRAY AS TABLE OF VARCHAR2 (255)
然后在 SQL 映射中,确保引用类型处理程序。