mybatis使用pgvector的實現(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ù)組轉換為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;
/**
* 文本內(nèi)容
*/
private String content;
/**
* 向量值
*/
@TableField(typeHandler = VectorTypeHandler.class)
private float[] embedding;
}
總結
接下來你就可以進行數(shù)據(jù)存儲與查詢了
到此這篇關于mybatis使用pgvector的實現(xiàn)示例的文章就介紹到這了,更多相關mybatis使用pgvector內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot整合Mybatis,解決TypeAliases配置失敗的問題
這篇文章主要介紹了SpringBoot整合Mybatis,解決TypeAliases配置失敗的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
Java的web開發(fā)中SSH框架的協(xié)作處理應用筆記
這篇文章主要介紹了Java的web開發(fā)中SSH框架的協(xié)作處理應用筆記,SSH是指Struts和Spring以及Hibernate的框架搭配,需要的朋友可以參考下2015-12-12
單臺Spring Cloud Eureka升級到三臺Eureka高可用集群
今天小編就為大家分享一篇關于單臺Spring Cloud Eureka升級到三臺Eureka高可用集群,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-12-12
如何解決Maven出現(xiàn)Could not find artifact的問題
這篇文章主要介紹了如何解決Maven出現(xiàn)Could not find artifact的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-04-04

