如何将List集合存入数据库,解决方案

作为新晋程序员,刚开始接触工作的时候遇到了一个问题。前端传过来一个List集合,需要将集合存入数据库,实体类字段为List类型,数据库中为varchar。而数据库中是不能直接存List集合的,这就需要做一个转换。

当时找了好久也没解决,后来看到下面的文章才解决,同时也加上了自己的理解,在此记录,希望能帮到正在看此篇文章的你。

private List<String> xxxxx;

我在网上找方案时参考了这篇文章使用Mybatis将List集合数据存入数据库

这里的思路是,利用mytais提供的类型转换接口TypeHandler来做。

private List<String> xxxxx;

实体类字段

TypeHandler代码在原文章中可以直接拿来用,这里仅对自己使用时遇到的问题做补充。

1.持久层代码,要加上类型转换器

#{xxxx,typeHandler=ListToVarcharTypeHandler}

2.实体类加上注解

@TableField(typeHandler = ListToVarcharTypeHandler.class)
private List<String> xxxx;

其余部分,直接使用即可。

--------------------------------更新-------------------------------

干了快2年java开发后,才发现不需要这么麻烦,直接将list转为json字符串存入表中即可。

### 使用 LangChain4J 将数据读取并存储到 Milvus 向量数据库 LangChain4J 是一种用于构建基于大语言模型的应用程序的框架,支持多种文档加载器和向量数据库集成。以下是关于如何使用 LangChain4J 加载文档并将数据存储到 Milvus 向量数据库中的详细说明。 #### 1. 文档解析与加载 LangChain 提供了丰富的工具来处理不同类型的文档(如 txt、pdf、html 等),这些工具能够将文档转换为字符串形式以便进一步处理[^1]。对于 Java 用户来说,`langchain4j` 库提供了类似的接口以实现这一功能。 ```java import dev.langchain4j.data.document.Document; import dev.langchain4j.data.document.DocumentLoader; public class DocumentParser { public static void main(String[] args) throws Exception { // 假设我们有一个 PDF 文件路径 String filePath = "path/to/your/document.pdf"; // 创建一个 DocumentLoader 实例 (这里假设是 PDF 类型) DocumentLoader documentLoader = new PdfDocumentLoader(); // 载入文档内容 List<Document> documents = documentLoader.load(filePath); System.out.println("Documents loaded successfully!"); } } ``` 上述代码展示了如何利用 `PdfDocumentLoader` 来加载 PDF 文件的内容,并将其转化为可操作的对象列表。 #### 2. 数据分割成 Chunks 为了适应模型的最大上下文长度限制,通常需要将完整的文本切分成更小的部分即 chunks。这一步骤可以通过自定义逻辑完成: ```java import java.util.ArrayList; import java.util.List; public class TextChunker { private final int chunkSize; public TextChunker(int chunkSize){ this.chunkSize = chunkSize; } public List<String> splitTextIntoChunks(List<String> texts){ List<String> result = new ArrayList<>(); for(String text : texts){ while(text.length() > chunkSize){ result.add(text.substring(0, Math.min(chunkSize, text.length()))); text = text.substring(Math.min(chunkSize, text.length())); } if(!text.isEmpty()){ result.add(text); } } return result; } } ``` 此方法接受一段较长的文字作为输入参数之一,并按照指定大小对其进行切割直到每部分都满足条件为止。 #### 3. 连接到 Milvus 并插入数据 Milvus 是一款专门针对高维特征搜索优化设计的关系型数据库解决方案,在其中我们可以高效地管理大量非结构化数据集及其对应的嵌入表示[^2][^4]。下面是如何设置连接并与之交互的一个例子: 首先确保安装好所需的依赖项: ```bash pip install pymilvus==2.x.x # 如果是在Python环境中运行的话 mvn dependency:tree | grep milvus-client-sdk # Maven项目则需确认已加入相应库版本号 ``` 接着编写Java客户端代码如下所示: ```java import io.milvus.client.MilvusServiceClient; import io.milvus.param.collection.CreateCollectionParam; import io.milvus.param.dml.InsertParam; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @Service public class MilvusVectorDatabaseService { @Value("${milvus.address}") private String address; public void connectAndInsertData(){ try(MilvusServiceClient client=new MilvusServiceClient(address)){ CreateCollectionParam param=CreateCollectionParam.newBuilder() .withCollectionName("my_collection") .addFieldType(FieldType.INT64,"id",true,false,null) .addFieldType(FieldType.FLOAT_VECTOR,"embedding",false,true,new Dimension(128)) .build(); Boolean res=client.createCollection(param).getStatus().isOk(); System.out.println(res?"Created collection":"Failed to create"); Float[][] vectors={{...},{...}};//实际应用中由上一环节生成的具体数值代替省略符位置 InsertParam insertParams=InsertParam.newBuilder() .withCollectionName("my_collection") .addVectors(vectors) .build(); Long count=client.insert(insertParams).getCount(); System.out.printf("%d records inserted%n",count); }catch(Exception e){ throw new RuntimeException(e.getMessage(),e); } } } ``` 以上片段演示了创建集合以及批量写入记录至目标表内的全过程。注意替换掉模板变量 `${milvus.address}` 和浮点数组实例等内容使其适配具体场景需求。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值