File 如何从csv文件中读取数据并将其存储在数据库中?弹簧靴

File 如何从csv文件中读取数据并将其存储在数据库中?弹簧靴,file,csv,spring-boot,upload,File,Csv,Spring Boot,Upload,例如,我有一个由用户名、电话号码和地址组成的用户实体。 我想从csv文件中读取所有这些字段,并将其存储在数据库的相应表中 有人能帮我描述一下怎么做吗?或者有关于如何实现这一点的文档吗?我假设您希望用户从某个UI上传文件。根据构建UI的确切方式,您可能会: 发送多部分HTTP POST请求(mime类型=多部分/表单数据;请参阅) 发送一个简单的POST请求,其正文直接包含文件内容 使用Spring可以相当容易地解决这两个问题 假设我们拥有以下实体: @数据 @实体 公共类用户{ @身份证 私

例如,我有一个由用户名、电话号码和地址组成的用户实体。 我想从csv文件中读取所有这些字段,并将其存储在数据库的相应表中


有人能帮我描述一下怎么做吗?或者有关于如何实现这一点的文档吗?

我假设您希望用户从某个UI上传文件。根据构建UI的确切方式,您可能会:

  • 发送多部分HTTP POST请求(mime类型=多部分/表单数据;请参阅)
  • 发送一个简单的POST请求,其正文直接包含文件内容
使用Spring可以相当容易地解决这两个问题

假设我们拥有以下实体:

@数据
@实体
公共类用户{
@身份证
私有字符串用户名;
私有字符串电话号码;
私有字符串地址;
}
我们定义了一个用于访问数据库的Spring数据存储库:

public interface UserRepository扩展了JpaRepository{
}
对于CSV反序列化,我建议使用Jackson。Jackson已经提供了Spring Boot,但我们需要在pom中为CSV添加一个数据格式扩展:


com.fasterxml.jackson.dataformat
)

  • 控制器级别。这是比较棘手的设置。以自定义方式移动CSV反序列化。您还应该将此转换器添加到(以便它可以使用它来反序列化多部分请求的一部分)。理论上,您可以将
    @Valid List
    声明为控制器方法的输入,Spring将根据mime类型自动调用消息转换器,然后调用验证器。有关示例,请参见


  • 最后,您可以随时手动调用验证:。

    您可以使用openCSV轻松实现这一点。 对于已知的POJO用户,您只需将CSV列(在您的示例中为标题)映射到POJO中的相应字段

    只需将以下内容添加到依赖项中,检查应用程序的最新版本即可

    <dependency> 
    <groupId>com.opencsv</groupId> 
    <artifactId>opencsv</artifactId> 
    <version>4.1</version> 
    </dependency> 
    
    
    com.opencsv
    

    看看spring Batch是怎么做的。但在那里,他们专门从一个文件中获取数据。我想点击一个api,允许用户从包含数据的系统中选择csv文件。如果我使用gradle,我应该使用哪个依赖项?gradle可以使用与maven完全相同的依赖项。例如,如果您在谷歌上搜索我为maven指定的依赖项,您将在mvn存储库()上找到它,在那里您有一个片段,您必须包含它来声明Gradle的依赖项:
    编译组:'com.fasterxml.jackson.dataformat',名称:'jackson dataformat csv',版本:'2.9.6'
    。我认为,如果导入了bom,则可以省略该版本:。你能看看这个吗?在你的utils例子中“mapper”是从哪里来的?很好!我编辑了答案以显示它是如何实例化的:
    CsvMapper mapper=new CsvMapper()