Spring boot实操演练5 ——导入Excel文件到数据库

目录

1、业务场景

(1)、分享原因

(2)、需求分析

(3)、数据库设计

2、开发环境和工具

3、代码思路

4、参考代码

导出模板vo(KitchenStoreExcelVo)

商铺信息表(HwKitchenStoreInfo)

Mapper 接口(HwKitchenStoreInfoMapper)

Mapping.xml(HwKitchenStoreInfoMapper.xml)

controller层(KitchenStoreManageController)

service层(IKitchenStoreManageService)

serviceImpl层(KitchenStoreManageServiceImpl)

5、总结


1、业务场景

(1)、分享原因

之前笔者分享过导出功能的一种写法,既然有导出功能,那相对的导入功能也是存在的一种需求,本期笔者就分享一下导入功能的一种思路;

(2)、需求分析

导入功能可分为两个子需求,子需求1是下载导入模板,子需求2是导入模板数据;

(3)、数据库设计

本次代码演示使用的业务背景是商铺基本信息管理,预插入数据对应的数据库设计如下图所示:

餐厨商铺信息表

2、开发环境和工具

因为该业务功能是在我实习公司已有项目下的拓展,所以环境依赖较多,我将重点阐述我所负责的后端代码逻辑,开发环境和工具只会简单带过;如果在借鉴代码过程中缺失包或者依赖,请根据IDE提示或者自行百度调试(就当锻炼自己对开发工具的熟悉程度啦);

(1)、IDE:IntelliJ IDEA 2022.1

(2)、测试:Postman

(3)、JDK:jdk-11.0.15

(4)、Spring Boot Version:2.2.5.RELEASE

(5)、modelVersion:4.0.0

(6)、pomVersion:0.0.1-SNAPSHOT

3、代码思路

4、参考代码

本次导入功能以最简单的(商铺)管理为代码背景来进行展示和说明:

导出模板vo(KitchenStoreExcelVo)


代码说明:

(1)、@Excel里面需要声明三个东西:

name:列名,对应数据库需要的字段;必填还是选填取决于数据库对应的字段能否为空,可以添加适当备注引导使用者正确填写;注意!并不是所有的数据库字段都需要用户导入,这里选择字段时参照的标准是对应新增功能需要用户填写的信息,所以本质是一个变相的新增功能,只是可以达到批量新增的效果而已;

orderNum:第几列,从0(这里的0等价于第1列)开始;

width:列宽,长度定义取决于你的列名(name)的长度,自行调试感受就行;

(2)、其他就是Vo的基本写法了,定义好属性后idea可以一键生成get和set方法,只需要右键空白处然后点击弹出菜单的Generate选择Getter and Setter,最后全选对应的属性即可;

package xxx.vo;

import cn.afterturn.easypoi.excel.annotation.Excel;
import com.fasterxml.jackson.annotation.JsonFormat;

import java.util.Date;

/**
 * <p>
 * 商铺信息导入excel模板下载用vo
 * </p>
 *
 * @author Mike-GY
 * @since 2022-08-29
 */

public class KitchenStoreExcelVo {

    /**
     * 商铺名称
     */
    @Excel(name = "商铺名称(必填,不能重复)", orderNum = "0", width = 30)
    private String storeName;
    /**
     * 商铺负责人名称
     */
    @Excel(name = "负责人(选填)", orderNum = "1", width = 20)
    private String leader;
    /**
     * 商铺负责人电话
     */
    @Excel(name = "联系电话(选填)", orderNum = "2", width = 20)
    private String leaderPhone;
    /**
     * 商铺类型名称
     */
    @Excel(name = "商铺类型(必填,请按照新增商铺功能下商铺类型可选选项来填写)", orderNum = "3", width = 60)
    private String typeName;
    /**
     * 所属政府区域名称
     */
    @Excel(name = "所属组织(必填,请按照新增商铺功能下所属组织可选选项来填写)", orderNum = "4", width = 60)
    private String depName;
    /**
     * 使用的垃圾桶数量
     */
    @Excel(name = "容器数量(个)(选填)", orderNum = "5", width = 25)
    private Integer garbageCanNum;
    /**
     * 商铺地址
     */
    @Excel(name = "地址(选填)", orderNum = "6", width = 20)
    private String storeAddress;
    /**
     * 营业状态名称
     */
    @Excel(name = "营业状态(选填)", orderNum = "7", width = 20)
    private String storeStatusName;
    /**
     * 签约时间
     */
    @Excel(name = "签约时间(选填,时间格式:yyyy-MM-dd)", orderNum = "8", width = 40)
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GTM+8")
    private Date signTime;

    public String getStoreName() {
        return storeName;
    }

    public void setStoreName(String storeName) {
        this.storeName = storeName;
    }

    public String getLeader() {
        return leader;
    }

    public void setLeader(String leader) {
        this.leader = leader;
    }

    public String getLeaderPhone() {
        return leaderPhone;
    }

    public void setLeaderPhone(String leaderPhone) {
        this.leaderPhone = leaderPhone;
    }

    public String getTypeName() {
        return typeName;
    }

    public void setTypeName(String typeName) {
        this.typeName = typeName;
    }

    public String getDepName() {
        return depName;
    }

    public void setDepName(String depName) {
        this.depName = depName;
    }

    public Integer getGarbageCanNum() {
        return garbageCanNum;
    }

    public void setGarbageCanNum(Integer garbageCanNum) {
        this.garbageCanNum = garbageCanNum;
    }

    public String getStoreAddress() {
        return storeAddress;
    }

    public void setStoreAddress(String storeAddress) {
        this.storeAddress = storeAddress;
    }

    public String getStoreStatusName() {
        return storeStatusName;
    }

    public void setStoreStatusName(String storeStatusName) {
        this.storeStatusName = storeStatusName;
    }

    public Date getSignTime() {
        return signTime;
    }

    public void setSignTime(Date signTime) {
        this.signTime = signTime;
    }
}

商铺信息表(HwKitchenStoreInfo


该model对应的是之前提到过的预插入数据对应的数据库的model,我是使用代码生成器快捷生成的,只能借鉴个结构,最上方的注入估计读者们抄不了,因为依赖存放的包位置绝对不一样,请自行查找补充;

package xxx.model;

import com.baomidou.mybatisplus.enums.IdType;
import java.util.Date;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;

import java.io.Serializable;

/**
 * <p>
 * 餐厨商铺信息表
 
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值