封装Easyexcel工具类导入表格数据存入数据库

导入和导出方法类型,但导入需要定义一个工具类继承AnalysisEventListener监听器


一、引入依赖

 
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>3.1.1</version>
        </dependency>

二、编写ExcelUtil

/**
 * Excel表格工具类
 */
@Slf4j
public class ExcelUtil {

	//-------------------------------------------------------------- 导入文件解析监听类 start ----------------------------------------------------

	/**
	 * 读取文件解析监听类
	 * @param <T>
	 */
	public static class ExcelListener<T> extends AnalysisEventListener<T> {

		/**
		 * 存放读取后的数据
		 */
		public List<T> datas = new ArrayList<>();

		/**
		 * 逐条读取数据
		 */
		@Override
		public void invoke(T t, AnalysisContext analysisContext) {
			datas.add(t);
		}

		/**
		 * 解析读取数据总条数
		 */
		@Override
		public void doAfterAllAnalysed(AnalysisContext analysisContext) {
			log.info("读取数据条数:{}条!", datas.size());
		}

		public List<T> getDatas() {
			return this.datas;
		}

	}

	/**
	 * 读取Excel表格返回数据集合,默认读取第一个sheet表数据
	 * @param inputStream  输入流
	 * @param tClass  数据映射类
	 * @param excelListener  读取监听类
	 * @param <T> 泛型
	 * @return List结果集
	 */
	public static <T> List<T> readExcel(InputStream inputStream, Class<T> tClass, ExcelListener<T> excelListener) {
		if (inputStream == null || tClass == null || excelListener == null) {
			return null;
		}
		ExcelReaderBuilder read = EasyExcel.read(inputStream, tClass, excelListener);
		read.sheet().doRead();
		return excelListener.getDatas();
	}

	/**
	 * 读取Excel表格返回数据集合,设置读取第几个sheet表数据
	 * @param inputStream  输入流
	 * @param sheetNo  第X个sheet表
	 * @param tClass  数据映射类
	 * @param excelListener  读取监听类
	 * @param <T> 泛型
	 * @return List结果集
	 */
	public static <T> List<T> readExcel(InputStream inputStream, Integer sheetNo, Class<T> tClass, ExcelListener<T> excelListener) {
		if (inputStream == null || tClass == null || excelListener == null) {
			return null;
		}
		ExcelReaderBuilder read = EasyExcel.read(inputStream, tClass, excelListener);
		if (sheetNo != null) {
			read.sheet(sheetNo).doRead();
		} else {
			ExcelReader excelReader = read.build();
			excelReader.readAll();
			excelReader.finish();
		}
		return excelListener.getDatas();
	}

	//-------------------------------------------------------------- 导入文件解析监听类 end ----------------------------------------------------

}

三、编写接收层controller

RequestParam对应的参数请求类型content-type,可理解为媒体类型,比如文件的上传和下载,spring中专门有个支持的类MultipartFile来支持这种请求。

  @PostMapping("/import")
  public void import(@RequestParam(value = "file") MultipartFile file) {
      service.import(file);
  }

四、在serviceImpl里调用工具类读取表格数据

@Override
 public void import(MultipartFile file) throws IOException {
  //读取上传文件数据转换成
  List<Export> list = ExcelUtil.readExcel(file.getInputStream(), 1, Export.class, new ExcelUtil.ExcelListener<>());
// 拿到list后发送给mapper层存入数据库
  Mapper.insertImport(list);
 }

service层和mapper层省略不写,获取list之后按照批量存入数据库方法写入数据库内

五、在postman中进行导入测试

选择File类型,上传需要导入的文件

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值