Java端有Class TypeA的某类型,现在需要把它作为参数,传给后台oracle数据库的一个procedure,而数据库端也定义了与此类同样结构的自定义TypeB。
步骤: 1. 定义实现了java.sql.SQLData的类Class TypeA。实现getSQLTypeName方法,返回值为数据库的自定义类型名。实现readSQL 方法时要注意,读sql字段的顺序要与Class TypeA中的field定义顺序一致。
2.Java端得到Jdbc connection;然后利用connection的getTypeMap方法得到jdbc customer type;最后将自定义类型TypeB与java类TypeA关联起来注册进map:map.put(TypeB,TypeA).
3.Ibatis的xml配置文件里parameter的jdbcType="TypeB" JavaType="TypeA" mode="IN"。
4.因为ibatis识别不出自定义类型jdbcType=="TypeB",所以还要自己写一个类TypeHandlerCallback,主要实现setParameter方法:
if ( ( arg1 instanceof TypeA ) == false )
{ logger.error( "MUST be oracle.sql.ARRAY." ); return; }
arg0.setObject( (TypeA)arg1 ); }