我正在尝试使用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();
}
答案 0 :(得分:0)
查看MyBatis typeHandlers的官方文档:
每当MyBatis在PreparedStatement上设置参数或检索时 ResultSet中的值,TypeHandler用于检索值 以适合Java类型的方式。
因此,TypeHandler
用于将从数据库读取的数据从数据库类型转换/映射到其java对应类型,反之亦然。 TypeHandler
不用于执行任何null
次检查。
考虑StringTypeHandler
的示例,它会转换数据库列类型CHAR
或VARCHAR
中的所有数据,并将其转换为java.lang.String
,反之亦然。