我一直在尝试TypeHandler
在 MyBatis 中进行自定义,以便对于null
数据库中的列,MyBatis 返回Null Object 模式的实现,而不是null
在域类中。
在谷歌上寻求帮助后,我找到了优秀的项目mybatis-koans,即koan 19,它用我使用的相同方法解决了这个问题,即扩展BaseTypeHandler<T>
(是抽象的)。在这一点上,我有一个TypeHandler
类似于EmailTypeHandler
koan的具体内容:
/**
* Acts as a factory method to return the appropriate implementation of an Email.
* Returns a Null object if the email value in the database was null/empty
*/
public class EmailTypeHandler extends BaseTypeHandler<Email> {
@Override
public Email getNullableResult(ResultSet rs, String colName) throws SQLException {
return createEmail(rs.getString(colName));
}
@Override
public Email getNullableResult(ResultSet rs, int colNum) throws SQLException {
return createEmail(rs.getString(colNum));
}
private Email createEmail(String s) {
System.out.println(s);
if (s == null || s.equals("")) {
return new NullEmail();
} else {
return new EmailImpl(s);
}
}
@Override
public Email getNullableResult(CallableStatement arg0, int arg1) throws SQLException {
return null;
}
@Override
public void setNonNullParameter(PreparedStatement ps, int colNum,
Email e, JdbcType t) throws SQLException {
}
}
不幸的是,作者( midpeter444 )似乎面临同样的问题:当数据库中的值为 时null
,仍然返回 null 而不是具体制作的对象TypeHandler
。