Это определенно возможно и описано в общих чертах в Конфигурация и в Mapper разделах документации.
Сначала определите обработчик:
@MappedJdbcTypes(JdbcType.INTEGER)
public class MyClassHandler extends BaseTypeHandler<MyClass> {
@Override
public void setNonNullParameter(PreparedStatement ps, int i,
MyClass parameter, JdbcType jdbcType) throws SQLException {
ps.setInt(i, parameter.asInt());
}
@Override
public MyClass getNullableResult(ResultSet rs, String columnName)
throws SQLException {
int val = rs.getInt(columnName);
if (rs.wasNull())
return null;
else
return MyClass.valueOf(val);
}
@Override
public MyClass getNullableResult(ResultSet rs, int columnIndex)
throws SQLException {
int val = rs.getInt(columnIndex);
if (rs.wasNull())
return null;
else
return MyClass.valueOf(val);
}
@Override
public MyClass getNullableResult(CallableStatement cs, int columnIndex)
throws SQLException {
int val = cs.getInt(columnIndex);
if (cs.wasNull())
return null;
else
return MyClass.valueOf(val);
}
}
Затем настройте его в mybatis-config.xml
:
<typeHandlers>
<typeHandler handler="my.company.app.MyClassHandler"/>
</typeHandlers>
Теперь вы можете использовать его в xml mappers.
Если у вас есть класс
class SomeTypeEntity {
private MyClass myClassField;
};
Для запроса обработчика конфигурации поля в resultMap
, например:
<resultMap id="someMap" type="SomeTypeEntity">
<result property="myClassField" column="my_class_column" typeHandler="my.company.app.MyClassHandler"/>
</resultMap>
Для insert
/ update
используйте это так:
<update id="updateSomeTypeWithMyClassField">
update some_type
set
my_class_column = @{someTypeEntity.myClassField, typeHandler=my.company.app.MyClassHandler},
</update>
для картографического метода:
void updateSomeTypeWithMyClassField(@Param("someTypeEntity") SomeTypeEntity entity);