1
Oracleユーザー定義のテーブル型をJavaオブジェクトのリストに変換するために、TypeHandlerを記述するのが難しいです。ユーザー定義のOracleテーブル型のMyBatis3 TypeHandlerの記述
データベースの種類と機能の仕様は、次のように定義されています。
CREATE OR REPLACE TYPE MySchema.MY_TYPE IS OBJECT (
first_name VARCHAR2(50),
last_name VARCHAR2(50)
);
CREATE OR REPLACE TYPE MySchema.MY_TYPE_TBL IS TABLE OF MY_TYPE;
FUNCTION GET_MY_STUFF(my_user_name IN VARCHAR2) RETURN MySchema.MY_TYPE_TABLE;
私はそれで次の呼び出しを持っているMyBatisのマッパーを持っている:
<resultMap id="myResultMap" type="GetMyStuffResult" />
<select id="getMyStuff" statementType="CALLABLE" parameterType="map">
{#{return_value, mode=OUT,
typeHandler=MyStuffToList
jdbcTypeName=MySchema.MY_TYPE_TABLE,
jdbcType=ARRAY} =
call MySchema.MyPackage.GET_MY_STUFF (
my_user_name => #{userName, mode=IN, jdbcType=VARCHAR}
)}
</select>
は最後に、私が書き込もうとしていますTypeHandlerではなく、getResultのオーバーライドで悲惨に失敗しています:
public class MyStuffToList implements TypeHandler<List<GetMyStuffResult>> {
// Other Overrides Here
@Override
public List<GetMyStuffResult> getResult(CallableStatement cs, int columnIndex)
throws SQLException {
List<GetMyStuffResult> results = new ArrayList<GetMyStuffResult>();
Array array = cs.getArray(columnIndex);
// HOW DO I CONVERT THE Array TO List<GetMyStuffResult> ???
return results;
}
}
I canno私が望むリストにに入ったCallableStatement
から届くようです。