[mybatis] +使用StringTypeHandler进行null检查而不是woking

时间:2017-10-18 09:49:42

标签: java spring mybatis spring-mybatis

我正在尝试使用MyBatis提供的StringTypeHandler对我的用户表中的lastName列执行空检查。 但是当我为lastName传递null值时,没有空检查,在更新表之前,StringTypeHandler正在执行lastName。

我想知道MyBatis提供的***TypeHandler的目的。

public String buildUserUpdateQuery(User user, Long userId) {
    return new SQL() {
      {
        UPDATE(UserTable.NAME);
        if (user.getFirstName() != null)
          SET(ProgramTable.Column.FIRST_NAME + " = #{program.departmentId,jdbcType=INTEGER,typeHandler=org.apache.ibatis.type.IntegerTypeHandler}");
        //if (program.getLastName() != null)
          SET(ProgramTable.Column.LAST_NAME + " = #{program.programName,jdbcType=VARCHAR,typeHandler=org.apache.ibatis.type.StringTypeHandler}");
        if (program.getMiddleName() != null)
          SET(ProgramTable.Column.MIDDLE_NAME + " = #{program.programStatus,jdbcType=VARCHAR,typeHandler=org.apache.ibatis.type.StringTypeHandler}");


        WHERE(ProgramTable.Column.USER_ID + " = #{userId}");
      }
    }.toString();
}

1 个答案:

答案 0 :(得分:0)

查看MyBatis typeHandlers的官方文档:

  

每当MyBatis在PreparedStatement上设置参数或检索时   ResultSet中的值,TypeHandler用于检索值   以适合Java类型的方式。

因此,TypeHandler用于将从数据库读取的数据从数据库类型转换/映射到其java对应类型,反之亦然。 TypeHandler不用于执行任何null次检查。

考虑StringTypeHandler的示例,它会转换数据库列类型CHARVARCHAR中的所有数据,并将其转换为java.lang.String,反之亦然。