Java,使用的是若依框架,直接给完整的代码,然后测试类有最好,只是其中的一个功能
有项目吗,直接发给我,给你加上你要的功能。
ok
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.4.4</version>
</dependency>
package com.ruoyi.web.controller.xxxxx;
import cn.hutool.core.text.csv.CsvData;
import cn.hutool.core.text.csv.CsvReader;
import cn.hutool.core.text.csv.CsvRow;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ruoyi.xxx.domain.*;
import com.ruoyi.xxx.service.*;
import com.ruoyi.common.core.domain.AjaxResult;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Paths;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
/**
* CSV数据导入.
*
* @author China110
* @version 2022/08/22
*/
@Slf4j
@RestController
@RequestMapping("/datainit")
public class DataInitController {
public static final String[] searchList = {"\"", "\uFEFF"};
public static final String[] replaceList = {"", ""};
//初始化系统数据
@Autowired
private XxxService xxxService;
@ApiOperation("导入xxx数据")
@GetMapping("/xxx")
public AjaxResult importXxx(String filePath) {
if (StringUtils.isBlank(filePath)) {
return AjaxResult.error("文件地址不能为空");
}
AtomicInteger add = new AtomicInteger();
AtomicInteger update = new AtomicInteger();
List<CsvRow> csvRows = this.readCsvFile(filePath);
csvRows.forEach(row -> {
List<String> rawList = row.getRawList();
Room room = this.toRoom(rawList);
if (roomService.getById(room.getId()) != null) {
this.xxxService.updateById(room);
update.addAndGet(1);
} else {
this.xxxService.save(room);
add.addAndGet(1);
}
});
log.info("新增xxx数据:{}", add.get());
log.info("修改xxx数据:{}", update.get());
return AjaxResult.success("数据处理完成");
}
/**
* 读取 csv 文件
*/
public static List<CsvRow> readCsvFile(String readCsvFilePath) {
// 创建 CSV Reader 对象, 参数说明(读取的文件路径,分隔符,编码格式)
CsvReader csvReader = new CsvReader(Paths.get(readCsvFilePath), StandardCharsets.UTF_8, null);
// 读取除表头外的内容
CsvData read = csvReader.read();
return read.getRows();
}
public static Room toRoom(List<String> fields) {
Xxx room = new Xxx();
String idStr = StringUtils.replaceEach(stringValied(fields.get(0)), searchList, replaceList);
String createDateStr = stringValied(fields.get(17));
String creator = stringValied(fields.get(18));
String updateDateStr = stringValied(fields.get(19));
String updater = stringValied(fields.get(20));
String deleteDateStr = stringValied(fields.get(21));
String deleter = stringValied(fields.get(22));
room.setId(Long.valueOf(idStr));
room.setCreateDate(parseLocalDateTime(createDateStr, fmtHms));
room.setCreator(creator);
room.setUpdateDate(parseLocalDateTime(updateDateStr, fmtHms));
room.setUpdater(updater);
room.setDeleteDate(parseLocalDateTime(deleteDateStr, fmtHms));
room.setDeleter(deleter);
return room;
}
public static LocalDateTime parseLocalDateTime(String localDateTimeStr, DateTimeFormatter fmt) {
if (StringUtils.isBlank(localDateTimeStr) || StringUtils.equalsAny(localDateTimeStr, "NULL", "null")) {
return null;
}
LocalDateTime localDateTime = null;
try {
localDateTime = LocalDateTime.parse(localDateTimeStr, fmt);
} catch (Exception e) {
System.out.println(e.getLocalizedMessage());
} finally {
return localDateTime;
}
}
public static String stringValied(String param) {
if (StringUtils.isBlank(param) || StringUtils.equalsAny(param, "NULL", "null")) {
return null;
}
return param;
}
}
很简单,如下:
package cn.util.controller;
import cn.util.entity.TlVacuumFurnaceLog;
import cn.util.service.vfService;
import cn.util.service.vfServiceImpl;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate5.SpringBeanContainer;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
@Controller
public class testC {
@Autowired
private vfService vfService; // 对应的保存接口
/**
* 导入csv文件处理
*/
@RequestMapping("/test1312")
public void test1(){
try {
// 读取文件 “GBK”解决文件里中文乱码
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("C:\\Users\\Administrator\\Desktop\\真空炉日志20210407StatusLog.csv"), "GBK"));
reader.readLine();//第一行信息是标题信息,跳过,如果需要第一行信息,请删除这行代码
String line ;
// 定义list,方便后面批次新增 TlVacuumFurnaceLog是表实体类
List<TlVacuumFurnaceLog> result = new ArrayList<>();
// 循环每行数据
while ((line = reader.readLine()) != null) {
// 分割字符串
String item[] = line.split(",");
if (item.length >0) {
// 调用下面的方法,将每列数据赋值到对应的属性中,返回的结果新增到list内
result.add(propertiesAssignment(item));
}
}
// 保存到数据库
insertDB(result);
} catch(Exception e){
e.printStackTrace();
}
}
/**
* 将行数据中每列数据分别添加到对应的属性中,返回实体类
*/
public TlVacuumFurnaceLog propertiesAssignment(String[] item) throws Exception{
// 获取目标类class
Class<TlVacuumFurnaceLog> clazz = TlVacuumFurnaceLog.class;
// 实例化
TlVacuumFurnaceLog tlVacuumFurnaceLog = clazz.newInstance();
// 获取对象全部属性
Field[] fields = clazz.getDeclaredFields();
// 循环遍历 当前行数据的列数
for (int i = 0; i < item.length; i++) {
// 获取方法名
String methodName = "set" + fields[i+1].getName().substring(0,1).toUpperCase() + fields[i+1].getName().substring(1);
// 获取Method参数
Method method = clazz.getMethod(methodName, fields[i+1].getType());
// 判断当前属性是什么类型的,将数据进行类型转换
if ("Integer".equals(fields[i+1].getType().getSimpleName())){
method.invoke(tlVacuumFurnaceLog,Integer.parseInt(item[i]));
} else if ("BigDecimal".equals(fields[i+1].getType().getSimpleName())){
method.invoke(tlVacuumFurnaceLog, new BigDecimal(item[i]));
} else if ("Short".equals(fields[i+1].getType().getSimpleName())){
method.invoke(tlVacuumFurnaceLog,Short.valueOf(item[i]));
} else if ("Double".equals(fields[i+1].getType().getSimpleName())){
method.invoke(tlVacuumFurnaceLog,Double.valueOf(item[i]));
} else if ("Byte".equals(fields[i+1].getType().getSimpleName())){
method.invoke(tlVacuumFurnaceLog,Byte.valueOf(item[i]));
} else if ("String".equals(fields[i+1].getType().getSimpleName())){
method.invoke(tlVacuumFurnaceLog,item[i]);
}
}
return tlVacuumFurnaceLog;
}
/**
* 保存数据到数据库
*/
public void insertDB(List<TlVacuumFurnaceLog> tlVacuumFurnaceLogs){
// 批量保存
vfService.saveBatch(tlVacuumFurnaceLogs);
}
}
需要注意的:
csv读取中文乱码,要加入“GBK”
invoke方法相当于第一个参数(对象)来调用method方法,第二个参数是set方法的值,类型要和setter方法类型一致,否则会报类型不匹配错误
Java,使用的是若依框架 , 为什么你不喜欢查看若依的API?
API里面提供了详细的操作方法
https://blog.csdn.net/qq_52785473/article/details/121916954JAVA使用JDBC插入数据库数据(十分方便好用,成功连接数据库后只需建相应的表填好路径和表名即可),这是我的博客,可以参考下