位置: 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项目开发实战)

  • MIUI12.5怎么解除文件限制访问(miui12.5怎么解除锁帧)

    MIUI12.5怎么解除文件限制访问(miui12.5怎么解除锁帧)

  • 京东怎么换身份证绑定(京东怎么换身份证号码)

    京东怎么换身份证绑定(京东怎么换身份证号码)

  • excel怎么删除空白多余格子呢(excel怎么删除空行批量)

    excel怎么删除空白多余格子呢(excel怎么删除空行批量)

  • 抖音怎么看自己的评论记录(抖音怎么看自己什么时候注册的)

    抖音怎么看自己的评论记录(抖音怎么看自己什么时候注册的)

  • 抖音手速太快点不了赞(抖音提示手速太快)

    抖音手速太快点不了赞(抖音提示手速太快)

  • 追加评价隐藏别人能看到吗(追加评价隐藏有用吗)

    追加评价隐藏别人能看到吗(追加评价隐藏有用吗)

  • 酷安app是干嘛用的(酷安app是做什么的)

    酷安app是干嘛用的(酷安app是做什么的)

  • 快手退货钱多久到账(快手退货退款多长时间内处理完)

    快手退货钱多久到账(快手退货退款多长时间内处理完)

  • 快手保证金多久能退回(快手保证金有时间限制吗)

    快手保证金多久能退回(快手保证金有时间限制吗)

  • 苹果x跟xr手机壳一样吗(苹果x跟xr手机壳一样大吗)

    苹果x跟xr手机壳一样吗(苹果x跟xr手机壳一样大吗)

  • 抖音私信给别人怎么取消(抖音私信给别人视频作者知道吗)

    抖音私信给别人怎么取消(抖音私信给别人视频作者知道吗)

  • u盘几十年不用东西会丢吗(u盘很多年不用会坏吗)

    u盘几十年不用东西会丢吗(u盘很多年不用会坏吗)

  • 4g电信卡突然上不了网(电信卡4g突然变2g怎么回事)

    4g电信卡突然上不了网(电信卡4g突然变2g怎么回事)

  • 快手私聊删了怎么恢复(快手私聊删除后怎么能找到?)

    快手私聊删了怎么恢复(快手私聊删除后怎么能找到?)

  • 怎么拉讨论组(怎么啦讨论组)

    怎么拉讨论组(怎么啦讨论组)

  • vivo反向充电怎么弄(vivo反向充电怎么给苹果充电)

    vivo反向充电怎么弄(vivo反向充电怎么给苹果充电)

  • 怎样在表格中加一行(怎样在表格中加入图片不变形)

    怎样在表格中加一行(怎样在表格中加入图片不变形)

  • 网易云更换绑定手机号(网易云更换绑定的手机号原来的东西还在吗)

    网易云更换绑定手机号(网易云更换绑定的手机号原来的东西还在吗)

  • macos big sur状态栏怎么显示键盘亮度?(macos big sur卡在)

    macos big sur状态栏怎么显示键盘亮度?(macos big sur卡在)

  • 微软正在成为Linux基金会白金会员(微软即将终止当前系统版本)

    微软正在成为Linux基金会白金会员(微软即将终止当前系统版本)

  • 安格尔西岛上的Tŵr Mawr 灯塔,英国威尔士 (© Joe Daniel Price/Getty Images)(安格雷尔)

    安格尔西岛上的Tŵr Mawr 灯塔,英国威尔士 (© Joe Daniel Price/Getty Images)(安格雷尔)

  • ps橡皮擦怎么擦出白色(ps橡皮擦怎么擦的跟背景色一样)

    ps橡皮擦怎么擦出白色(ps橡皮擦怎么擦的跟背景色一样)

  • 开小卖部怎么报税
  • 9月份扣什么税?
  • 借转股意思
  • 个体如何申请电子公章流程
  • 在业跟续存有什么不一样
  • 房地产购买材料财务报销单上怎么写
  • 火车票进项抵扣怎么勾选
  • 季度预交所得税可以弥补上年度亏损吗
  • 个体工商户怎么注册
  • 对供应商的罚款怎么入账
  • 即期外汇交易有幅度限制吗
  • 调增应纳税所得额
  • 地税退税政策
  • 取得的增值税发票哪些项目必须开具事项
  • 增值税计算方法有哪些
  • 汇算清缴后需要退税如何操作?
  • 钢结构施工速度快吗
  • wd discovery怎么安装
  • 营改增后一般纳税人税率
  • 此应用无法在你的电脑上运行w11
  • phpadmin官网
  • 公司与个人的往来款怎么处理
  • 公司撤股后还要担责任吗
  • 企业购入固定资产,价值3000元,误记入管理费用账户
  • win10如何给文件夹上锁
  • 长期股权投资初始投资成本和入账价值
  • 深度学习之GPU显存与利用率 浅析小结
  • 会计如何分录
  • vue3 安装
  • 变量与数据
  • php socket_write
  • 应该如何打造自己
  • 记账凭证的记账符号要打勾吗
  • 货已入库进项发票未到怎么办
  • php sleep()
  • python元组操作方法
  • mysql有输入输出语句
  • mongodb reference
  • 单位结余资金该如何处理
  • 新政府会计制度下的基建会计
  • 月底主营业务成本会计分录
  • 纳税人防伪税控设备未抄报怎么办
  • 计提职工薪酬是什么意思
  • 政府会计双核算模式的好处
  • 一般纳税人的招待费会计分录
  • 存货周期怎么计算
  • 视同销售的账务处理如何做?
  • 零售商品收入
  • 施工企业的具体工作有哪些
  • 只有合同没发票能挂账吗
  • 生产成本里面的直接人工
  • 企业哪些项目可以立项
  • 残疾人就业保障金怎么计算
  • 原材料暂估的账务处理
  • sql server Bulk Insert命令详细
  • sql server中查看创建的数据库命令
  • sqlserver高级教程
  • win7经典版怎么换回win10
  • win10系统无法安装打印机句柄无效
  • win7英伟达显卡驱动安装失败
  • win10如何关闭windows安全中心图标
  • mac如何快速复制文件
  • 虚拟机centos7无法启动
  • msdev.exe是什么
  • 开机需要两次
  • js框架的作用
  • 实例的英文
  • 如何设置edittext控件中的文字
  • activity的生命周期有哪些状态
  • 批处理注册reg文件
  • unity unit
  • 安卓系统滑动设置
  • fw开发
  • unity unite
  • 安卓开发 内存
  • JAVAscript字符串类型单引号和双引号意一样吗
  • android常见问题及解决方法
  • 西藏拉萨工业园主要生产什么
  • 打单子的打印机能否打a4的纸
  • 纳税申报2020年2月
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设