Skip to content

自定义列类型映射

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注册),会自动添加到配置中