mybatis 自定义类型处理程序(不带注释)

标签 mybatis

我是 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/

相关文章:

mysql - 计算 SQL 查询执行并将行转换为 mybatis 中的 java 对象所需的时间

java - MyBatis 中 mapUnderscoreToCamelCase 的行为

mysql - 如何将MySql查询结果存储在MyBatis中的变量中

java - 在Mybatis中使用GET_WKT()返回空值

java - 使用MyBatis连接数据库时出现空指针异常

java - 使用 getGenerateKeys 获取更新记录主键失败 - MyBatis

java - 使用 myBatis 从数据库读取 JSON

mysql - 使用 JDBC 在 MyBatis 中回滚(无 Spring,无容器)

java - mybatis ClassNotFoundException BuilderException TypeException

java - 如何使用 Mybatis 插入 java List<String>?