自定义列类型映射
huiche是单向的数据读写,仅根据java侧类型决定数据的读写方式,跟数据库中实际类型无关,只需要支持对应的读写方式即可
你可以自定义类型映射,来覆盖内置的字段类型映射(自定义的优先级高),支持泛型
了解内置列类型映射
创建自定义列类型映射
以List<String>为例,实现一个按,分隔的读写方式
java
public class ListStringColumnMapper implements ColumnMapper<List<String>> {
@Override
public List<String> read(ResultSet rs, int columnIndex, Type type,
Configuration configuration) throws SQLException {
String str = rs.getString(columnIndex);
if (str == null || str.isBlank()) return Collections.emptyList();
return List.of(str.split(","));
}
@Override
public boolean write(PreparedStatement ps, int parameterIndex,
List<String> value, Configuration configuration) throws SQLException {
// value不会为null,如果是null不会进入这里(因为判断类型才能进入对应类型的映射器..)
if (value.isEmpty()) {
ps.setString(parameterIndex, null);
} else {
ps.setString(parameterIndex, String.join(",", value));
}
return true;
}
}添加列映射到配置中
java
ConfigurationBuilder builder = Configuration.builder();
// 省略其他配置项
builder.addColumnMapper(new ListStringColumnMapper());使用spring-boot-starter时,如果自行实现的类型映射注册为bean(使用@Component等或使用@Configuration注册),会自动添加到配置中