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