mybatis自定义类型处理程序没有annoations

时间:2018-05-04 16:58:20

标签: mybatis

我是mybatis的新手。我试图将JDBC整数映射到自定义类。我在此看到的所有示例都使用了注释,是否可以不使用注释并执行此操作?任何一个例子将不胜感激。

斯里卡特

1 个答案:

答案 0 :(得分:0)

这绝对是可能的,并且在文档的ConfigurationMapper部分中进行了一般性描述。

首先定义处理程序:

@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);