mybatis使用pgvector的实现示例

 更新时间:2026年01月26日 10:29:45   作者: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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • tk.mybatis如何扩展自己的通用mapper

    tk.mybatis如何扩展自己的通用mapper

    这篇文章主要介绍了tk.mybatis如何扩展自己的通用mapper操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • MyBatis中TypeHandler基本用法与示例

    MyBatis中TypeHandler基本用法与示例

    本文主要介绍了MyBatis中TypeHandler基本用法与示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-11-11
  • Springboot使用cache缓存过程代码实例

    Springboot使用cache缓存过程代码实例

    这篇文章主要介绍了Springboot使用cache缓存过程代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • java线程并发blockingqueue类使用示例

    java线程并发blockingqueue类使用示例

    BlockingQueue是一种特殊的Queue,若BlockingQueue是空的,从BlockingQueue取东西的操作将会被阻断进入等待状态直到BlocingkQueue进了新货才会被唤醒,下面是用BlockingQueue来实现Producer和Consumer的例子
    2014-01-01
  • windows11下jdk同时安装多个版本并自由切换全网最详细教程

    windows11下jdk同时安装多个版本并自由切换全网最详细教程

    一台电脑可以同时安装多个版本jdk,建议两个,最多不超三个,安装多个JDK版本可能会占用较多的磁盘空间,这篇文章主要介绍了windows11下jdk同时安装多个版本并自由切换的相关资料,需要的朋友可以参考下
    2025-11-11
  • Maven及Springboot配置JDK版本,编码,源码打包等方式

    Maven及Springboot配置JDK版本,编码,源码打包等方式

    这篇文章主要介绍了Maven及Springboot配置JDK版本,编码,源码打包等方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • 详解Java对象转换神器MapStruct库的使用

    详解Java对象转换神器MapStruct库的使用

    在我们日常开发的程序中,为了各层之间解耦,一般会定义不同的对象用来在不同层之间传递数据。当在不同层之间传输数据时,不可避免地经常需要将这些对象进行相互转换。今天给大家介绍一个对象转换工具MapStruct,代码简洁安全、性能高,强烈推荐
    2022-09-09
  • mybatis映射表结构的使用

    mybatis映射表结构的使用

    MyBatis通过表结构映射实现数据库操作,本文就来介绍一下mybatis映射表结构的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-11-11
  • Java构建JDBC应用程序的实例操作

    Java构建JDBC应用程序的实例操作

    在本篇文章里小编给大家整理了一篇关于Java构建JDBC应用程序的实例操作,有兴趣的朋友们可以学习参考下。
    2021-03-03
  • MyBatis Example And与Or混合使用的实例

    MyBatis Example And与Or混合使用的实例

    这篇文章主要介绍了MyBatis Example And与Or混合使用的实例,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12

最新评论