mybatis使用pgvector的實(shí)現(xiàn)示例
定義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數(shù)組轉(zhuǎn)換為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;
}
}
注冊(cè)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;
/**
* 文本內(nèi)容
*/
private String content;
/**
* 向量值
*/
@TableField(typeHandler = VectorTypeHandler.class)
private float[] embedding;
}
總結(jié)
接下來(lái)你就可以進(jìn)行數(shù)據(jù)存儲(chǔ)與查詢(xún)了
到此這篇關(guān)于mybatis使用pgvector的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)mybatis使用pgvector內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
工廠方法模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了工廠方法模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理的相關(guān)資料,需要的朋友可以參考下2017-08-08
SpringBoot整合Mybatis,解決TypeAliases配置失敗的問(wèn)題
這篇文章主要介紹了SpringBoot整合Mybatis,解決TypeAliases配置失敗的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
Java的web開(kāi)發(fā)中SSH框架的協(xié)作處理應(yīng)用筆記
這篇文章主要介紹了Java的web開(kāi)發(fā)中SSH框架的協(xié)作處理應(yīng)用筆記,SSH是指Struts和Spring以及Hibernate的框架搭配,需要的朋友可以參考下2015-12-12
Java中數(shù)組轉(zhuǎn)List的三種方法與對(duì)比分析
這篇文章主要給大家介紹了關(guān)于Java中數(shù)組轉(zhuǎn)List的三種方法與對(duì)比分析的相關(guān)資料,分別介紹了最常見(jiàn)方式、數(shù)組轉(zhuǎn)為L(zhǎng)ist后,支持增刪改查的方式以及通過(guò)集合工具類(lèi)Collections.addAll()方法,需要的朋友可以參考下2018-07-07
JAVA純代碼導(dǎo)出PDF文件實(shí)現(xiàn)方式
本文介紹了作者通過(guò)突發(fā)奇想發(fā)布了生成PDF的博客,最初,作者通過(guò)將Word文件轉(zhuǎn)換為PDF文件實(shí)現(xiàn)導(dǎo)出PDF功能,但效果不盡如人意,后來(lái),作者嘗試直接生成PDF文件,并修復(fù)了生成PDF時(shí)出現(xiàn)的小瑕疵,通過(guò)導(dǎo)入依賴(lài)、下載接口和下載方法的實(shí)現(xiàn)2025-01-01
單臺(tái)Spring Cloud Eureka升級(jí)到三臺(tái)Eureka高可用集群
今天小編就為大家分享一篇關(guān)于單臺(tái)Spring Cloud Eureka升級(jí)到三臺(tái)Eureka高可用集群,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12
如何解決Maven出現(xiàn)Could not find artifact的問(wèn)題
這篇文章主要介紹了如何解決Maven出現(xiàn)Could not find artifact的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-04-04

