我是 mybatis 新手。我正在尝试将 JDBC 整数映射到自定义类。我见过的所有示例都使用了注释,是否可以不使用注释并执行此操作?任何例子将不胜感激。
斯里坎斯
最佳答案
这绝对是可能的,并且在 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>
对于插入
/更新
使用如下:
<update id="updateSomeTypeWithMyClassField">
update some_type
set
my_class_column = @{someTypeEntity.myClassField, typeHandler=my.company.app.MyClassHandler},
</update>
对于映射器方法:
void updateSomeTypeWithMyClassField(@Param("someTypeEntity") SomeTypeEntity entity);
关于mybatis 自定义类型处理程序(不带注释),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50179854/