typeHandler 可以在新增、更新、查询时候字段进行数据类型转换与解析
下面为用法步骤:
步骤1、实体类配置注解:
// 只针对jdbcType为varchar的字段进行mapping处理,勿略jdbcType设置为空的字段
@MappedJdbcTypes(includeNullJdbcType = false, value = JdbcType.VARCHAR)
//autoResultMap 默认为false,设为true之后字段解析有typeHandler 的特殊字段
@TableName(value = "wx_user",autoResultMap = true)
步骤2、字段注解
@TableField(typeHandler = ArrayLongTypeHandler.class, jdbcType= JdbcType.VARCHAR)
private Long[] tagidList;
步骤3、解析类
/**
* 存储到数据库, 将LONG数组转换成字符串;
* 从数据库获取数据, 将字符串转为LONG数组.
*/
@MappedTypes({Long[].class})
@MappedJdbcTypes({JdbcType.VARCHAR})
public class ArrayLongTypeHandler extends BaseTypeHandler<Long[]> {
private static Long[] longs = new Long[]{};
@Override
public void setNonNullParameter(PreparedStatement ps, int i,
Long[] parameter, JdbcType jdbcType) throws SQLException {
ps.setString(i, JSONUtil.toJsonStr(parameter));
}
@Override
public Long[] getNullableResult(ResultSet rs, String columnName)
throws SQLException {
String text=rs.getString(columnName);
return parse2LArr(text);
}
@Override
public Long[] getNullableResult(ResultSet rs, int columnIndex)
throws SQLException {
String text=rs.getString(columnIndex);
return parse2LArr(text);
}
@Override
public Long[] getNullableResult(CallableStatement cs, int columnIndex)
throws SQLException {
String text=cs.getString(columnIndex);
return parse2LArr(text);
}
private Long[] parse2LArr(String text){
if(MyStrUtil.isNotEmpty(text)){
JSONArray jsonArray= JSON.parseArray(text);
List<Long> longList=jsonArray.toJavaList(Long.class);
return longList.toArray(longs);
}
return longs;
}
}
解析得到的结果