位置: IT常识 - 正文

微服务 Spring Boot Mybatis-Plus 整合 EasyPOI 实现 Excel 一对多 导入(微服务springboot结构)

编辑:rootadmin
微服务 Spring Boot Mybatis-Plus 整合 EasyPOI 实现 Excel 一对多 导入 文章目录⛄引言一、EasyPOI 实现Excel 的一对多导入 -- 代码实现⛅需求说明⚡核心源码实现二、Easy POI 实现一对多导入 -- 测试三、效果图展示⛵小结⛄引言

推荐整理分享微服务 Spring Boot Mybatis-Plus 整合 EasyPOI 实现 Excel 一对多 导入(微服务springboot结构),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:微服务 spring security,微服务springboot结构,微服务 spring mvc,微服务springboot,微服务 spring mvc,微服务 spring,微服务springboot与springcloud,微服务springboot结构,内容如对您有帮助,希望把文章链接给更多的朋友!

Excel导入 是 开发中 很常用的 功能 ,本篇讲解 如何使用 Spring Boot + MyBatis -Plus 整合 EasyPOI 实现Excel 的一对多导入。

EasyPOI官网

一、EasyPOI 实现Excel 的一对多导入 – 代码实现⛅需求说明

采用 微服务 Spring Boot、Mybatis-Plus 整合 EasyPOI 实现Excel的一对多导入

Excel 导入 实现详细细节

前端采用 Vue+ElementUI 实现导入页面展示,要求弹出上传框、 展示导入模板、 并且要求文件手动上传后端导入 要求实现EasyPOI实现、采用工具类完成导入的集合映射要求使用 Mybatis-Plus 实现 批量导入⚡核心源码实现

Excel 一对多导入如下所示

以上的商品信息该如何进行映射呢?

EasyPOI为我们提供了专门的映射集合的注解,@ExcelCollection

表示一个集合,主要针对一对多的导出,比如一个老师对应多个科目,科目就可以用集合表示

采用 注解进行映射即可

后端源码

SysUserExcel

package com.chen.excel;import cn.afterturn.easypoi.excel.annotation.Excel;import cn.afterturn.easypoi.excel.annotation.ExcelCollection;import com.chen.entity.GoodsEntity;import lombok.Data;import java.util.Date;import java.util.List;@Datapublic class SysUserExcel { @Excel(name = "序号", orderNum = "0", format = "isAddIndex") private Integer index = 1; @Excel(name = "用户账号 *") private String username; @Excel(name = "真实姓名 *") private String realName; @Excel(name = "用户性别 *", replace = {"男_1", "女_2"}) private Integer gender; @Excel(name = "电子邮箱", width = 25) private String email; @Excel(name = "手机号码 *") private String mobile; // 注解映射商品信息集合 @ExcelCollection(name = "商品信息") private List<GoodsExcel> goodsList;}

GoodsExcel

package com.chen.excel;import cn.afterturn.easypoi.excel.annotation.Excel;import cn.afterturn.easypoi.excel.annotation.ExcelCollection;import com.chen.entity.GoodsEntity;import lombok.Data;import java.util.List;@Datapublic class GoodsExcel { @Excel(name = "商品编号", orderNum = "0", format = "isAddIndex") private Integer index = 1; @Excel(name = "商品名称") private String goodsName; @Excel(name = "商品价格") private Double goodsPrice; @Excel(name = "收货地址") private String address;}

SysUserService

public interface SysUserService extends IService<SysUserEntity> { ResultBean<PageInfo<SysUserDTO>> page(SysUserDTO param); ResultBean<Integer> insert(SysUserDTO param); ResultBean<Integer> importExcel(MultipartFile file);}

SysUserServiceImpl

@Overridepublic ResultBean<Integer> importExcel(MultipartFile file) { ImportParams importParams = new ImportParams(); //标题行设置为1行,默认是0,可以不设置;依实际情况设置。 importParams.setTitleRows(0); // 表头设置为1行 importParams.setHeadRows(2); try { //读取excel List<SysUserExcel> sysUserExcelList = ExcelImportUtil.importExcel(file.getInputStream(), SysUserExcel.class, importParams); batchInsert(sysUserExcelList); return ResultBean.create(0, "success"); } catch (Exception e) { log.error("导入 Excel 异常! e ==> {}", e); return ResultBean.create(10, "导入excel 异常!"+e.getMessage()); }}public void batchInsert(List<SysUserExcel> param) throws Exception{ //1.转换为dto集合 List<SysUserEntity> sysUserEntityList = BeanUtil.copyToList(param, SysUserEntity.class); //2.转换为商品实体集合 List<GoodsEntity> goodsEntityList = BeanUtil.copyToList(param.get(0).getGoodsList(), GoodsEntity.class); //3.转换集合 sysUserEntityList.stream().filter(obj -> obj.getUsername() != null) .forEach(obj -> obj.setPassword("123")); //4.批量保存 saveBatch(sysUserEntityList); // 保存用户id至商品id sysUserEntityList.stream().forEach(obj -> { goodsEntityList.stream().forEach(goods -> { goods.setUserId(obj.getId()); }); }); goodsService.saveBatch(goodsEntityList);}微服务 Spring Boot Mybatis-Plus 整合 EasyPOI 实现 Excel 一对多 导入(微服务springboot结构)

商品业务类

GoodsEntity

@Data@TableName("tb_goods")public class GoodsEntity { private Long id; private Long userId; private String goodsName; private Double goodsPrice; private String address; private Date createTime; private Date updateTime;}

GoodsService

import com.baomidou.mybatisplus.extension.service.IService;import com.chen.entity.GoodsEntity;/** * @author whc */public interface GoodsService extends IService<GoodsEntity> {}

GoodsServiceImpl

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;import com.chen.entity.GoodsEntity;import com.chen.mapper.GoodsMapper;import com.chen.service.GoodsService;import lombok.extern.slf4j.Slf4j;import org.springframework.stereotype.Service;/** * @author whc */@Slf4j@Servicepublic class GoodsServiceImpl extends ServiceImpl<GoodsMapper, GoodsEntity> implements GoodsService {}

前端源码

SysUserList Vue 部分

<el-dialog :visible.sync="userVisibleOnly" width="780px" title="新增/编辑"> <el-form :model="sysUser" :rules="rules" ref="sysUserForm" label-width="120px"> <el-row> <el-form-item style="font-weight: bold" label="模板下载"> <el-button type="text">导入用户模板</el-button> </el-form-item> </el-row> <el-row> <el-form-item style="font-weight: bold" label="相关附件"> <el-upload class="upload-demo" :action="importUrl" :on-success="uploadSuccess" accept=".xlsx" ref="upload" multiple :limit="3" :auto-upload="false" :on-exceed="handleExceed"> <el-button type="primary" icon="el-icon-upload2" size="small">导入</el-button> </el-upload> <!-- <el-button type="primary" size="small">点击上传</el-button>--> </el-form-item> </el-row> </el-form> <span slot="footer" class="dialog-footer"> <el-button type="primary" size="mini" @click="clkBtnUpload">确定</el-button> <el-button type="warning" size="mini" @click="userVisibleOnly = false">取消</el-button> </span></el-dialog>

SysUserList JS 部分

data(){return:{userVisibleOnly: false}}metheds:{uploadSuccess(val) { if (val.code == 0) { this.$message.success("导入成功~"); this.getSysUserList(); } }, handleExceed(val) { }, clkBtnUpload() { this.submitUpload(); this.$message({ showClose: true, message: '上传成功,正在导入...' }); this.userVisibleOnly = false; }, submitUpload() { this.$refs.upload.submit(); },}

代码编写完毕,进行测试

二、Easy POI 实现一对多导入 – 测试

启动后端、前端 访问 : 127.0.0.1:80

导入测试

导入采用手动导入,点击确定后,将表单提交至后端

断点进入

我们看到已经完成了对象映射,直接进行映射对象,插入数据库即可

扩展知识:IDEA 断点快捷键 f8 按行进行断点调试、f9 进入下一次断点位置,若没有,直接结束

三、效果图展示

⛵小结

以上就是【Bug 终结者】对 微服务 Spring Boot Mybatis-Plus 整合 EasyPOI 实现 Excel 一对多 导入 的简单介绍,Excel一对多导入其实如此简单,Excel导入也是很常见的功能,希望带来这个案例,大家可以遇到需求时,进行举一反三,感谢支持!

如果这篇【文章】有帮助到你,希望可以给【Bug 终结者】点个赞👍,创作不易,如果有对【后端技术】、【前端领域】感兴趣的小可爱,也欢迎关注❤️❤️❤️ 【Bug 终结者】❤️❤️❤️,我将会给你带来巨大的【收获与惊喜】💝💝💝!

本文链接地址:https://www.jiuchutong.com/zhishi/298671.html 转载请保留说明!

上一篇:【JavaScript数据结构与算法】字符串类(反转字符串中的单词)(javascript数据类型)

下一篇:openCV实践项目:拖拽虚拟方块(opencv项目开发实战)

  • 微信朋友圈营销秘籍之5大要点(微信朋友圈营销广告)

    微信朋友圈营销秘籍之5大要点(微信朋友圈营销广告)

  • iwatch7怎么关机(apple watch关机)

    iwatch7怎么关机(apple watch关机)

  • 华为闹钟铃声怎么设置(华为闹钟铃声怎么调)

    华为闹钟铃声怎么设置(华为闹钟铃声怎么调)

  • 美团钱包账单怎么删除(美团里我的钱包里账单怎么删除)

    美团钱包账单怎么删除(美团里我的钱包里账单怎么删除)

  • 华为手机照相功能怎么没有了(华为手机照相功能能把文件校正吗)

    华为手机照相功能怎么没有了(华为手机照相功能能把文件校正吗)

  • 爱奇艺登录失效是什么意思(爱奇艺登录失效是怎么回事)

    爱奇艺登录失效是什么意思(爱奇艺登录失效是怎么回事)

  • 充电器插头歪了怎么办(充电器插头歪了能掰直吗)

    充电器插头歪了怎么办(充电器插头歪了能掰直吗)

  • 匿名评价 卖家能看到吗(匿名评价卖家知道吗)

    匿名评价 卖家能看到吗(匿名评价卖家知道吗)

  • qq没有网络怎么回事(qq没有网络怎么回事ios)

    qq没有网络怎么回事(qq没有网络怎么回事ios)

  • 台式电脑可以开wifi热点吗(台式电脑可以开腾讯会议吗)

    台式电脑可以开wifi热点吗(台式电脑可以开腾讯会议吗)

  • 微信扫一扫添加不到桌面(微信扫一扫添加好友)

    微信扫一扫添加不到桌面(微信扫一扫添加好友)

  • icloud内存满了怎么办(icloud内存满了怎么删)

    icloud内存满了怎么办(icloud内存满了怎么删)

  • q9650用什么显卡(q9650配什么内存)

    q9650用什么显卡(q9650配什么内存)

  • ps怎么新建通道

    ps怎么新建通道

  • 微信浮窗设置在哪设置(微信浮窗设置在哪设置苹果手机)

    微信浮窗设置在哪设置(微信浮窗设置在哪设置苹果手机)

  • 8p无线充电需要接收器吗(8p无线充电伤电池吗)

    8p无线充电需要接收器吗(8p无线充电伤电池吗)

  • 苹果6浮标在哪里设置(苹果6怎么设置浮标小圆点)

    苹果6浮标在哪里设置(苹果6怎么设置浮标小圆点)

  • mt132ch/a是苹果什么型号(mt132ch/a和mt122ch/a区别)

    mt132ch/a是苹果什么型号(mt132ch/a和mt122ch/a区别)

  • 苹果xr话筒在哪个位置(苹果xr话筒声音小怎么处理)

    苹果xr话筒在哪个位置(苹果xr话筒声音小怎么处理)

  • 华为p30的翻译功能在哪里(华为p30翻译功能)

    华为p30的翻译功能在哪里(华为p30翻译功能)

  • 坚果手机如何连接电视(坚果怎么跟手机连接)

    坚果手机如何连接电视(坚果怎么跟手机连接)

  • 苹果x拍照发黄(苹果x拍照发黄怎么回事)

    苹果x拍照发黄(苹果x拍照发黄怎么回事)

  • VUE 父子组件、兄弟组件 之间通信 最强详解(vue父子组件加载顺序)

    VUE 父子组件、兄弟组件 之间通信 最强详解(vue父子组件加载顺序)

  • Jetson AGX Orin上部署YOLOv5_v5.0+TensorRT8(jetson b01 a02)

    Jetson AGX Orin上部署YOLOv5_v5.0+TensorRT8(jetson b01 a02)

  • 个人博客-SpringBoot+Vue3项目实战(2)- 使用Vite搭建Vue3项目并安装Element Plus(个人博客登录入口)

    个人博客-SpringBoot+Vue3项目实战(2)- 使用Vite搭建Vue3项目并安装Element Plus(个人博客登录入口)

  • 如何使用 CSS 使表格居中(快速指南)(css怎么调用)

    如何使用 CSS 使表格居中(快速指南)(css怎么调用)

  • 私车公用如何处理
  • 小规模纳税人增值税减免账务处理
  • 印花税应计入什么账户
  • 小规模企业可以收增值税专用发票吗
  • 财务专用章的重要性
  • 雇佣退休人员工伤赔偿标准
  • 非营利组织的项目管理流程包括
  • 代扣代缴个税返点怎么申请
  • 政府搬迁补偿款记资本公积
  • 临时用工工资税率怎么算
  • 企业购车保险费怎么做会计分录
  • 怎么办开户许可证
  • 小规模纳税人开票税率
  • 公司向法人借款有税务风险吗
  • 收到承兑如何贴现
  • 安全基金提取标准
  • 可以先报税后结账吗
  • 年度结转之前需要做什么
  • 票据权利的概念与性质
  • 预收账款企业所得税怎么处理会计分录
  • 不能抵扣的进项税怎么做账
  • 增值税普票怎么验证真伪
  • 企业不合规发票责令补开处理
  • 福利费应计入什么费用
  • 用友财务软件怎样
  • 然后重装系统win7
  • 通用pe工具箱安装教程
  • 认证未抵扣的发票购买方能开红字信息表吗
  • 电子税务局变更办税人员怎么操作
  • PHP:mb_strrpos()的用法_mbstring函数
  • 房地产企业预售房产怎么缴税
  • 承兑托收费用
  • 收到违约金赔款计入什么科目
  • php定时执行代码
  • 进料加工与来料加工均为一进一出的两笔交易
  • 工业企业成本核算流程
  • 会计财务报表的编制步骤
  • php文件上传用什么请求方法
  • 前端实现文件下载列表
  • 李牧其人
  • deepsort 跟踪
  • 往来款项清查账务处理
  • 金融资产减值迹象
  • 技术服务型企业企业所得税率
  • 研发费用属于什么成本
  • 员工垫付公司的保险费
  • php 队列
  • 红字发票开错了是可以作废的吗?
  • 建筑安装工人住宿费会计分录
  • sqlserver2005 TSql新功能学习总结(数据类型篇)
  • 商品流通企业流程图
  • in参数太多导致sql过长
  • mysql的环境配置
  • 收到银行承兑汇票如何记账
  • 进口化妆品品牌大全
  • 企业从应付职工工资中代扣的职工房租应借记什么科目
  • 多交的税费申请抵扣下期
  • 外贸企业出口货物的计税依据
  • 配件销售人员应该具备哪些能力
  • 会计软件包括
  • 改制后企业是否可以剥离资产管理
  • logo是什么文件夹
  • win8怎么安装不了win10
  • sudo service: command not found 报错的解决方法
  • centos7如何进入命令行
  • win7系统怎么关闭病毒防护
  • win8补丁官网
  • web ui控件
  • 嗌中怎么读
  • Unity3D事件函数的执行顺序
  • xml能写网页吗
  • angular2双向数据绑定原理
  • 使用BMFont+NGUI利用图片制作自定义字体
  • jquery中的css方法
  • jquery的checkbox,radio,select等方法小结
  • easyui发送ajax请求
  • android开发从入门到精通(项目案例版)
  • android圆环进度条渐变
  • 安徽省定额发票真伪查询
  • 乌鲁木齐交通服务电话
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设