java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > mybatis使用pgvector

mybatis使用pgvector的实现示例

作者:2501_91537388

本文主要介绍了mybatis定义和注册VectorTypeHandler,并使用@TableName注解设置Entity类,其中autoResultMap属性设置为true,这样就可以实现数据存储与查询,感兴趣的可以了解一下

定义VectorTypeHandler

import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.postgresql.util.PGobject;

import java.sql.*;

public class VectorTypeHandler extends BaseTypeHandler<float[]> {

    @Override
    public void setNonNullParameter(PreparedStatement ps, int i,
                                    float[] parameter, JdbcType jdbcType) throws SQLException {
        // 将float数组转换为PostgreSQL vector格式字符串
        PGobject vector = new PGobject();
        vector.setType("vector");
        vector.setValue(arrayToVectorString(parameter));
        ps.setObject(i,vector); ;
    }

    @Override
    public float[] getNullableResult(ResultSet rs, String columnName) throws SQLException {
        return vectorStringToArray(rs.getString(columnName));
    }

    @Override
    public float[] getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        return vectorStringToArray(rs.getString(columnIndex));
    }

    @Override
    public float[] getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        return vectorStringToArray(cs.getString(columnIndex));
    }

    private String arrayToVectorString(float[] array) {
        StringBuilder sb = new StringBuilder("[");
        for (int i = 0; i < array.length; i++) {
            if (i > 0) sb.append(",");
            sb.append(array[i]);
        }
        sb.append("]");
        return sb.toString();
    }

    private float[] vectorStringToArray(String vector) {
        if (vector == null || vector.isEmpty()) return null;
        String cleaned = vector.replace("[", "").replace("]", "");
        String[] parts = cleaned.split(",");
        float[] result = new float[parts.length];
        for (int i = 0; i < parts.length; i++) {
            result[i] = Float.parseFloat(parts[i].trim());
        }
        return result;
    }
}

注册VectorTypeHandler

    @Bean
    public ConfigurationCustomizer mybatisConfigurationCustomizer() {
        return configuration -> {
            configuration.getTypeHandlerRegistry()
                    .register(float[].class, new VectorTypeHandler());
        };
    }

定义Entity

注意加上 autoResultMap = true ===>>> @TableName(value =“text_vector”, autoResultMap = true)

@TableName(value ="text_vector", autoResultMap = true)
@Data
public class TextVector implements Serializable {
    /**
     * 主键
     */
    @TableId
    private String id;

    /**
     * 文本内容
     */
    private String content;

    /**
     * 向量值
     */
    @TableField(typeHandler = VectorTypeHandler.class)
    private float[] embedding;
}

总结

接下来你就可以进行数据存储与查询了

到此这篇关于mybatis使用pgvector的实现示例的文章就介绍到这了,更多相关mybatis使用pgvector内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文