当前位置: 代码网 > it编程>编程语言>Java > mybatis使用pgvector的实现示例

mybatis使用pgvector的实现示例

2026年01月26日 Java 我要评论
定义vectortypehandlerimport org.apache.ibatis.type.basetypehandler;import org.apache.ibatis.type.jdbct

定义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内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com