Java + MyBatis,向量字段能否直接对应到Java成员

技术细节讲得很清楚,学到了!

实践出真知,感谢分享实战经验

签到…

加油!!!

可以的,MyBatis 通过自定义 TypeHandler 就能把向量字段映射到 Java 成员。思路是:数据库侧向量列存的是文本格式(如 [0.1,0.2,0.3]),Java 侧用 float[]List<Float> 接收。

核心步骤:

  1. 实体类定义向量成员:
public class DocEntity {
    private Long id;
    private float[] embedding; // 对应向量列
}
  1. 编写 TypeHandler:
@MappedTypes(float[].class)
public class VectorTypeHandler extends BaseTypeHandler<float[]> {
    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, float[] param, JdbcType type) {
        // 转成 [0.1,0.2,...] 文本
        ps.setString(i, Arrays.toString(param));
    }
    @Override
    public float[] getNullableResult(ResultSet rs, String col) {
        String val = rs.getString(col);
        // 解析文本为 float[]
        return parseVector(val);
    }
}
  1. Mapper XML 中指定 typeHandler:
<resultMap id="docMap" type="DocEntity">
  <result column="embedding" property="embedding" typeHandler="VectorTypeHandler"/>
</resultMap>

插入时同理,在 #{embedding, typeHandler=VectorTypeHandler} 即可。这样就不依赖 obvec_jdbc,用标准 MyBatis 流程处理向量字段。

感谢作者的整理和分享

签到…

感谢分享!

赞一个!

干货满满,受益匪浅

内容很好

期待更多分享

支持支持

经验分享很有价值

内容很好

赞一个!

期待更多分享