配置注册
mybatis.type-handlers-package=com.itec.core.handler
使用
@MappedJdbcTypes({JdbcType.CLOB}) @MappedTypes({String.class}) public class TextHandler implements TypeHandler<String> { private int max = 300; @Override public void setParameter(PreparedStatement preparedStatement, int i, String s, JdbcType jdbcType) throws SQLException { preparedStatement.setString(i,s); } @Override public String getResult(ResultSet rs, String columnName) throws SQLException { String text = rs.getString(columnName); if (StringUtils.isNotEmpty(text)) { return text.substring(0, text.length() > max ? max : text.length()); } else { return ""; } } @Override public String getResult(ResultSet rs, int columnIndex) throws SQLException { String text = rs.getString(columnIndex); if (StringUtils.isNotEmpty(text)) { return text.substring(0, text.length() > max ? max : text.length()); } else { return ""; } } @Override public String getResult(CallableStatement cs, int columnIndex) throws SQLException { String text = cs.getString(columnIndex); if (StringUtils.isNotEmpty(text)) { return text.substring(0, text.length() > max ? max : text.length()); } else { return ""; } } }
<result property="summary" column="summary" typeHandler="com.patsnap.inno.doc.core.handler.TextHandler" jdbcType="CLOB"/>
注意 如果是集成BaseTypeHandler,那么将会在所有符合条件的字段上起作用。
所以,除非特么全局通用的TypeHandler,否则不要使用BaseTypeHandler.
要注意 MyBatis 不会窥探数据库元信息来决定使用哪种类型,所以你必须在参数和结果映射中指明那是 VARCHAR 类型的字段, 以使其能够绑定到正确的类型处理器上。 这是因为:MyBatis 直到语句被执行才清楚数据类型。
链接
Mybatis3.3.x技术内幕(十二):Mybatis之TypeHandler