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

  • 荣耀50怎么设置视频通话美颜(荣耀50怎么设置锁屏壁纸)

    荣耀50怎么设置视频通话美颜(荣耀50怎么设置锁屏壁纸)

  • 苹果手机qq自动回复怎么设置(苹果手机qq自动离线)

    苹果手机qq自动回复怎么设置(苹果手机qq自动离线)

  • 红米10x屏幕材质(红米10x手机屏幕材质)

    红米10x屏幕材质(红米10x手机屏幕材质)

  • 快手没关注发私信能收到吗(快手没关注发私信)

    快手没关注发私信能收到吗(快手没关注发私信)

  • 使用美团红包对商家有影响吗(美团红包对商家有补贴么)

    使用美团红包对商家有影响吗(美团红包对商家有补贴么)

  • 荣耀30s是什么屏(荣耀30s是什么屏幕材质)

    荣耀30s是什么屏(荣耀30s是什么屏幕材质)

  • 苹果手机一直是静音模式怎么办(苹果手机一直是白苹果状态但是开不了机)

    苹果手机一直是静音模式怎么办(苹果手机一直是白苹果状态但是开不了机)

  • 华为nova6横屏时可以分屏吗(华为nova6手机横屏设置)

    华为nova6横屏时可以分屏吗(华为nova6手机横屏设置)

  • 5mp和4k哪个清晰(4k跟1080p哪个更清晰)

    5mp和4k哪个清晰(4k跟1080p哪个更清晰)

  • 爱奇艺怎么截图无水印(爱奇艺怎么截图二维码让别人登录)

    爱奇艺怎么截图无水印(爱奇艺怎么截图二维码让别人登录)

  • vivo下载的视频在哪里找(vivo下载的视频在哪个文件夹)

    vivo下载的视频在哪里找(vivo下载的视频在哪个文件夹)

  • 微信忙线未接听有几种可能(微信忙线未接听对方那边显示什么)

    微信忙线未接听有几种可能(微信忙线未接听对方那边显示什么)

  • iwatch微信聊天记录怎么删除(iwatch微信聊天记录不见了)

    iwatch微信聊天记录怎么删除(iwatch微信聊天记录不见了)

  • 微信对方忙线会提醒吗(微信对方忙线会显示对方使用的铃声吗)

    微信对方忙线会提醒吗(微信对方忙线会显示对方使用的铃声吗)

  • 华为手机越用越慢怎么处理(华为手机越用越流畅)

    华为手机越用越慢怎么处理(华为手机越用越流畅)

  • vivo怎么让手机不锁屏(vivo怎么让手机不灭屏)

    vivo怎么让手机不锁屏(vivo怎么让手机不灭屏)

  • 如何获得七天网络授权(七天网怎么登录进入)

    如何获得七天网络授权(七天网怎么登录进入)

  • v1914a是什么手机型号(v1919a是什么手机)

    v1914a是什么手机型号(v1919a是什么手机)

  • 腾讯文档在线编辑怎么保存(腾讯文档在线编辑怎么不让其他人看见)

    腾讯文档在线编辑怎么保存(腾讯文档在线编辑怎么不让其他人看见)

  • 微信收款码异常多久恢复(微信收款码异常是什么原因,怎么解决)

    微信收款码异常多久恢复(微信收款码异常是什么原因,怎么解决)

  • 华为怎么升级9.1(华为怎么升级app)

    华为怎么升级9.1(华为怎么升级app)

  • 迅雷如何切换音轨(迅雷怎么切换音频)

    迅雷如何切换音轨(迅雷怎么切换音频)

  • 西瓜视频如何申请原创(西瓜视频如何申诉判搬运)

    西瓜视频如何申请原创(西瓜视频如何申诉判搬运)

  • 直通车扣费原理公式(直通车扣费原理图)

    直通车扣费原理公式(直通车扣费原理图)

  • switcher.exe - switcher是什么进程

    switcher.exe - switcher是什么进程

  • win11系统开机密码怎么设置 Window11系统开机密码设置教程(win11系统开机密码怎么修改)

    win11系统开机密码怎么设置 Window11系统开机密码设置教程(win11系统开机密码怎么修改)

  • dellmmkb.exe是什么进程 dellmmkb进程有什么作用(checkingmedia什么意思戴尔笔记本)

    dellmmkb.exe是什么进程 dellmmkb进程有什么作用(checkingmedia什么意思戴尔笔记本)

  • 营业额超500万会罚款吗
  • 餐饮个体户如何开票
  • 销售货物的运费计入成本吗
  • 期间费用明细表中的各项税费是指什么
  • 银行存款对银行的作用
  • 销售成本是负债吗
  • 利息股息红利所得个人所得税税率
  • 营改增后销售租赁后的设备如何做税务处理?
  • 股权转让企业所得税纳税地点
  • 润滑油消费税征税环节
  • 股权转让溢价部分怎么做分录
  • 收到银行的贷款
  • 经济纠纷的解决途径包括哪些
  • 关于保险机构代收车船税开具增值税发票问题的公告
  • 土地闲置费是否可以列入生产成本
  • 写着个人的发票能下账吗
  • 应交税费的期初余额是借还是贷
  • 轮胎计入什么会计科目
  • 企业核算方法
  • 授权费计入什么科目
  • 有销项没有进项怎么结算成本
  • 建帐选择什么会计制度和会计准则之后能修改吗
  • 固定资产折旧怎么做记账凭证
  • mac系统如何切换大小写
  • 税金及附加包括个人所得税吗
  • 个税申报晚了会退税费吗
  • 无人驾驶控制方向
  • 生产企业一般贸易
  • 关于灵活就业人员待遇享受政策
  • 带你看看房间英语怎么写
  • php分页查询的简称是什么
  • 专票地址错了要作废吗
  • 土地使用税退税的会计分录
  • 个税系统为什么没有累计数据
  • 纳税人在工作
  • 计提预付账款会计分录
  • 现金流量表中的现金流量包括哪些
  • 低值易耗品管理办法
  • 专用发票跨月冲红流程
  • sqlserver2012安装后找不到
  • 购买员工团体意外险条款
  • 会计专业技术资格初级是什么职称
  • 安装购买的材料怎么做账
  • 投资性房地产抵债怎么做账务处理
  • 出租房屋损坏赔偿
  • 餐饮店赠品
  • 加盟费收入需要纳税吗
  • 在哪找从平台消费的人
  • 建账的基本流程图
  • mysql 索引 语句
  • win10 性能选项
  • win8.1无法启动怎么办
  • Qq浏览器怎么切换成极速模式
  • WIN10如何设置电脑自动锁屏
  • 1sass.exe是什么程序
  • azipmd5.exe是什么
  • win8系统怎么设置
  • mac电脑怎么打开
  • linux批量替换文件夹名称
  • linux引导和启动
  • win8网络连接受限怎么处理
  • msng.exe是什么
  • 物联网版块股票
  • opengl怎么学
  • android开发环境配置
  • linux列操作
  • opengl配置vc6.0
  • easyui搜索框
  • 批处理作用
  • js运行时错误
  • js简单代码
  • python cx_Oracle模块的安装和使用详细介绍
  • node基础知识
  • 安卓手机管家怎么关闭
  • javascript原型链详解
  • 国家税务总局石棉县税务局
  • 教育附加费网上缴费
  • 酒类包装物押金的消费税处理规定
  • 无锡市高新区税务局张贤平
  • 湖北省税务局网站授权
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设