我是mybatis的新手。我试图将JDBC整数映射到自定义类。我在此看到的所有示例都使用了注释,是否可以不使用注释并执行此操作?任何一个例子将不胜感激。
斯里卡特
答案 0 :(得分:0)
这绝对是可能的,并且在文档的Configuration和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映射器中使用它。 如果你有一个班级
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>
用于mapper方法:
void updateSomeTypeWithMyClassField(@Param("someTypeEntity") SomeTypeEntity entity);