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

  • oppo怎么把电池百分比移出来(oppo怎么把电池百分比显示在外面)

    oppo怎么把电池百分比移出来(oppo怎么把电池百分比显示在外面)

  • 电脑版WPS怎么在表格里筛选出一样的东西(电脑版wps怎么在方框里打勾)

    电脑版WPS怎么在表格里筛选出一样的东西(电脑版wps怎么在方框里打勾)

  • win10错误代码0xc000000e(win10错误代码0xc0000001进不了安全模式)

    win10错误代码0xc000000e(win10错误代码0xc0000001进不了安全模式)

  • qq在聊天怎么弄壁纸(qq聊天怎么弄长图)

    qq在聊天怎么弄壁纸(qq聊天怎么弄长图)

  • 手机处理器太低能换吗(手机处理器太低玩游戏卡怎么办)

    手机处理器太低能换吗(手机处理器太低玩游戏卡怎么办)

  • prd加日期什么意思(prod加日期什么意思)

    prd加日期什么意思(prod加日期什么意思)

  • 荣耀30pro有无线充电吗(荣耀30pro可以无线)

    荣耀30pro有无线充电吗(荣耀30pro可以无线)

  • dub-tl00是华为什么型号(华为dua tl00什么型号)

    dub-tl00是华为什么型号(华为dua tl00什么型号)

  • 手机导航老是显示信号弱是怎么回事(手机导航老是显示位于室内怎么办)

    手机导航老是显示信号弱是怎么回事(手机导航老是显示位于室内怎么办)

  • 电脑怎么下载ppt(电脑怎么下载ppt到u盘)

    电脑怎么下载ppt(电脑怎么下载ppt到u盘)

  • 苹果手机5.5寸是多少厘米(苹果手机5.5寸是多大)

    苹果手机5.5寸是多少厘米(苹果手机5.5寸是多大)

  • 闲鱼支持7天无理由退款吗(咸鱼支持7天无理由么)

    闲鱼支持7天无理由退款吗(咸鱼支持7天无理由么)

  • cpues版什么意思(cpu的es版本能买吗)

    cpues版什么意思(cpu的es版本能买吗)

  • qq空间上传照片怎么才能不在动态中显示(qq空间上传照片怎么显示手机型号)

    qq空间上传照片怎么才能不在动态中显示(qq空间上传照片怎么显示手机型号)

  • vivo手机快捷开关在哪(vivo手机快捷开灯)

    vivo手机快捷开关在哪(vivo手机快捷开灯)

  • 滴滴拼车可以开票吗(滴滴怎么拼车)

    滴滴拼车可以开票吗(滴滴怎么拼车)

  • 怎么解绑以前的抖音手机号(怎么解绑以前的抖音号)

    怎么解绑以前的抖音手机号(怎么解绑以前的抖音号)

  • 手机qq正在下载怎么取消(手机qq正在下载安装)

    手机qq正在下载怎么取消(手机qq正在下载安装)

  • 搜电充电宝怎么归还(搜电充电宝怎么在家充电)

    搜电充电宝怎么归还(搜电充电宝怎么在家充电)

  • 滴滴怎么取消学生认证(滴滴怎么取消学生模式)

    滴滴怎么取消学生认证(滴滴怎么取消学生模式)

  • 苹果手机括号怎么打(苹果手机括号怎么弄)

    苹果手机括号怎么打(苹果手机括号怎么弄)

  • qq存的表情在哪(qq上存的表情在哪儿找)

    qq存的表情在哪(qq上存的表情在哪儿找)

  • 苹果怎么双微信(苹果微信分身怎么弄)

    苹果怎么双微信(苹果微信分身怎么弄)

  • 拼多多在哪查订单编号(拼多多哪里查看订单)

    拼多多在哪查订单编号(拼多多哪里查看订单)

  • MAC设置通知栏显示iTunes歌曲更换信息步骤(mac怎么把通知栏固定)

    MAC设置通知栏显示iTunes歌曲更换信息步骤(mac怎么把通知栏固定)

  • 合伙企业交企业所得税还是个人所得税
  • 法人章和财务章谁保管
  • 销售购物取得的收入
  • 福利费进项税转出的会计分录
  • 房地产项目结转条件
  • 支付给个人的佣金怎么做账务处理
  • 出纳工作的七大技巧
  • 计提存货跌价准备是递延所得税资产吗
  • 研发费用加计扣除新税收政策2023
  • 资金账号和交易账号一样吗
  • 支票存根联要带去银行吗
  • 用于在建工程的贷款利息
  • 复式记账法和会计分录
  • 园林项目绿化工程
  • 固定资产入账必须有发票吗
  • 软件技术服务费算无形资产吗
  • 专用发票扣税
  • 税控专用发票和普通发票
  • 公司厂房在建但已收到房租是否要交房产税呢?
  • 公司缴纳社保要多久
  • 股东增加投资款要交印花税吗
  • 领用库存商品的消费税
  • 税后利润分配需要计提吗
  • 城市维护建设税计算公式
  • 投资合伙企业对公司有债务责任吗
  • 公司租赁的办公室装修费用可以抵进项税吗
  • 双倍余额法折旧率计算公式
  • 其他应付款长期挂账税务处理
  • 系统托盘右键
  • Win11怎么设置自启动软件
  • 现金付款凭证是什么意思
  • php二维数组的遍历
  • 不动产售后回租如何处理
  • 旧房屋转卖的协议怎么写
  • 给退休人员发放一次性工龄补贴是真的吗
  • chatGPT身份指令
  • pytorch教程
  • 原材料用于在建工程增值税如何处理
  • 小微企业会计制度是什么
  • SQLserver数据库的while附近有语法错误,应为AS
  • 企业会计准则每股收益
  • 自来水适用3%税率还是9%税率
  • 利息收入怎么入账
  • 小规模差额征税的账务处理
  • 合伙企业要不要每月做账?报税是不是与一般的有限公司一样,每月申报纳税吗?
  • 房租押金可以要回来吗
  • 委托加工物资账务
  • 会计处理要求
  • 增值税发票上注明的价款包含增值税吗
  • 项目上工人死亡赔偿
  • 固定资产没有发票
  • 增值税发票开负数怎么做账?
  • 结转已到期未兑现的商业承兑汇票会计分录
  • 税金及附加没有设置二级科目,有啥影响吗
  • 消费满赠送活动规则
  • 无生产经营收入可以评为a吗
  • 剩余股利政策发放股利后的年末未分配利润
  • 商品流通的企业
  • 什么叫归集和分配
  • c3p0连接池提供了哪些方式来配置连接池的参数
  • MySQL关键字执行顺序
  • sql取汉字
  • xp无法创建目录或文件
  • ubuntuone
  • 快速切换用户是什么意思
  • mac入门视频教程
  • win7系统设置只让安装有证书的软件
  • win7系统自动弹出搜索框
  • Extjs中RowExpander控件的默认展开问题示例探讨
  • nodejs rbac
  • vim安装ycm
  • 如何旋转图片30度
  • unity之血瓶金币的生成
  • macos mono
  • javascript操作网页
  • 税务处理决定书属于行政处罚吗
  • 税务局风险管理股工作总结
  • 湖南电子税务局密码错误5次
  • 广东广州税务局电话
  • 千兆交换机涨价
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设