java代码将csv格式的文件导入数据库

java代码将csv格式的文件导入数据库

最近接到了一个需求,将csv文件的内容通过java进行入库操作,在此记录一下整个完整的代码

主要逻辑

读取csv的每一个数据,对数据对应的对象赋值,将对象放入集合中,因为数据量大,对list进行拆分,最后分批量入库操作,关键代码如下

1、pom.xml引入依赖

1.1 关于csvRead的依赖

<dependency>
	<groupId>net.sourceforge.javacsv</groupId>
	<artifactId>javacsv</artifactId>
	<version>2.0</version>
</dependency>

1.2 关于Lists拆分集合的依赖

<dependency>
	<groupId>com.google.guava</groupId>
	<artifactId>guava</artifactId>
	<version>29.0-jre</version>
</dependency>

2、bean

@Data
public class CsvData {
	private Integer id;
	private String name;
	private String school;
}

3、controller层代码

@RestController
public Map<String,Object> CSVImport(String fileName){
	//接收返回的数据返回给前端
	HashMap<String,Object> result = new HashMap<String,Object>();
	CsvData csvData =null;
	CsvReader r;
	try{
		//放文件的位置
		String cvsFilePath="磁盘地址"+fileName+".csv";
		r = new CsvReader(cvsFilePath,',',Charset.forName("utf-8"));
		//读取表头
		boolean b = r.readHeaders();
		ArrayList<CsvData> list = new ArrayList<CsvData>();
		while(r.readRecord()){
			csvData = new CsvData();
			//注意,此处的id,name,school是csv文件里的列名
			csvData.setId(Integer.parseInt(r.get("id")));
			csvData.setName(r.get("name"));
			csvData.setSchool(r.get("school"));
			list.add(csvData);
		}
		//等份拆分list
		List<List<CsvData>> partition = Lists.partition(list,150);
		//将数据分批存入数据库
		for(List<CsvData> eachList:partition){
			csvDataService.insertBatch(eachList);
		}
		result.put("success","success");
		list.clear();
		r.close();
	}catch(Exception e){
		e.printStackTrace();
	}
	return result;
}

4、service.serviceImpl层省略

5、dao层

public interface CSVDataDao{
	void insertBatch(@Param("list") List<CsvData> list);
}

6、Mapper.xml

<insert id="insertBatch" parameterType="csvData的包名">
	insert into 数据库名.表名 (id,name,school)
	values
	<foreach collection ="list" item ="item" separator=",">
	(#{item.id},#{item.name},#{item.school})
	</foreach>
</insert>
  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值