1、背景
对于实体类,属性标签类型是数组[“java”, “python”],在数据库对应的字段类型是varchar,现在需要存储到数据库, 将String数组转换成字符串,从数据库获取数据, 将字符串转为String数组
2、处理类
@MappedTypes({String[].class})
@MappedJdbcTypes({JdbcType.VARCHAR})
public class ArrayStringTypeHandler extends BaseTypeHandler<String[]> {
private static String[] strArray = new String[]{};
@Override
public void setNonNullParameter(PreparedStatement preparedStatement, int parameterIndex,
String[] parameter, JdbcType jdbcType) throws SQLException {
preparedStatement.setString(parameterIndex, JSON.toJSONString(parameter));
}
@Override
public String[] getNullableResult(ResultSet resultSet, String columnName)
throws SQLException {
return JSON.parseArray(resultSet.getString(columnName)).toArray(strArray);
}
@Override
public String[] getNullableResult(ResultSet resultSet, int columnIndex)
throws SQLException {
return JSON.parseArray(resultSet.getString(columnIndex)).toArray(strArray);
}
@Override
public String[] getNullableResult(CallableStatement callableStatement, int columnIndex)
throws SQLException {
return JSON.parseArray(callableStatement.getString(columnIndex)).toArray(strArray);
}
}
3、使用
// 属性使用注解
@TableField(typeHandler = ArrayStringTypeHandler.class, jdbcType = JdbcType.VARCHAR)
private String[] labelList;
4、测试
更新
==> Preparing: UPDATE subj_info SET label_list=? WHERE id=?
==> Parameters: ["java","python"](String), 1690595443903389697(String)
<== Updates: 1
查询
==> Preparing: SELECT id, label_list FROM subj_info WHERE id=?
==> Parameters: 1690595443903389697(String)
<== Columns: id, label_list
<== Row: 1690595443903389697, ["java","python"]
<== Total: 1
数据库存储值
["java","python"]