Springboot系列(十六):集成easypoi实现Excel的导入导出(实战篇一)

·  阅读 1291
Springboot系列(十六):集成easypoi实现Excel的导入导出(实战篇一)

「这是我参与2022首次更文挑战的第18天,活动详情查看:2022首次更文挑战

👨‍🎓作者:bug菌

✏️博客:CSDN掘金

💌公众号:猿圈奇妙屋

🚫特别声明:原创不易,转载请附上原文出处链接和本文声明,谢谢配合。

🙏版权声明:文章里可能部分文字或者图片来源于互联网或者百度百科,如有侵权请联系bug菌处理。

       嗨,家人们,我是bug菌呀,我又来啦。今天我们来聊点什么咧,OK,接着为大家更《springboot零基础入门教学》系列文章吧。希望能帮助更多的初学者们快速入门!

       小伙伴们在批阅文章的过程中如果觉得文章对您有一丝丝帮助,还请别吝啬您手里的赞呀,大胆的把文章点亮👍吧,您的点赞三连(收藏⭐️+关注👨‍🎓+留言📃)就是对bug菌我创作道路上最好的鼓励与支持😘。时光不弃🏃🏻‍♀️,创作不停💕,加油☘️

一、前言

       上期,我主要是带着大家学习了easypoi的一些概念及依赖配置,包括一些常用注解的使用,这期我将带着大家进行实战练习,希望大家在学习的路上虚心学习,我也不是大佬,但是我希望的写的文章能带动大家,哪怕这个大家是一个人,我也愿意帮我会的全部都倾囊相授,我就是这么一个人,让自己发光发热,带动更多人,你为大家,大家才会为你。

二、引入依赖配置

<!--easypoi依赖,excel导入导出-->
<dependency>
    <groupId>cn.afterturn</groupId>
    <artifactId>easypoi-spring-boot-starter</artifactId>
    <version>4.2.0</version>
</dependency>

三、实现excel导入

1、先定义一个接收实体

/**
 * excel导入user参数
 *
 * @author luoYong
 * @version 1.0
 * @date 2022/2/15 14:34
 */
@Data
public class ImportUser implements Serializable {

    private static final long serialVersionUID = 1L;


  /**
    * @Excel 作用在一个filed上面,对列的描述
    * @param name 列名
    * @param orderNum 下标,从0开始。
    */
    @Excel(name = "姓名", orderNum = "0")
    private String name;

    @Excel(name = "年龄", orderNum = "1")
    private Integer age;

    @Excel(name = "性别", orderNum = "2")
    private String sex;

    @Excel(name = "地址", orderNum = "3")
    private String address;

    @Excel(name = "用户描述", orderNum = "4")
    private String describes;
   
}

注意:
如果easypoi没有设置orderNum,默认是从上往下排序!!!

       列的标题一定要和我们对象中的@Excle name名称对应,一定要对应!具体请看如下:

拓展一下:

1.@Data  注解为lombok插件提供,为类提供读写功能,从而不用写get、set方法。
2.@Excel 作用到filed上面,是对Excel一列的一个描述。

2、Controller添加导入方法

/**
 * excel批量导入用户
 */
@GetMapping("/import")
@ApiOperation(value = "excel批量导入用户", notes = "excel批量导入用户")
public ResultResponse<Boolean> importUsers(@RequestParam("file") MultipartFile file) {
    return new ResultResponse<>(userService.importUsers(file));
}

3、定义导入接口

/**
 * excel批量导入用户
 *
 * @param file excel文件
 */
Boolean importUsers(MultipartFile file);

4、实现导入接口

/**
 * excel批量导入用户
 *
 * @param file excel文件
 */
@Override
public Boolean importUsers(MultipartFile file) {
    
    ImportParams importParams = new ImportParams();
    //标题行设置为1行,默认是0,可以不设置;依实际情况设置。
    importParams.setTitleRows(1);
    // 表头设置为1行
    importParams.setHeadRows(1);
    try {
        //读取excel
        List<ImportUser> users = ExcelImportUtil.importExcel(file.getInputStream(), ImportUser.class, importParams);    
        //批量插入
        boolean isSuccess = this.saveUsers(users);
        //返回结果
        return isSuccess;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return false;
}

       这里需要注意表头的行数设置一定要正确!否则集合数据将无法读取报错。一定要区分表头与标题的区别,表头是列名称,标题是表头上面的文字,具体事例可以看下方截图。

       示例截图文件中有标题并占用一行,所以setTitleRows设置为1。表头也占用一行,所以setHeadRows设置为1;

代码具体设置如下:

importParams.setTitleRows(1);
importParams.setHeadRows(1);

       然后获取到要插入到数据库中的数据之后,再使用批量插入方法,将集合插入到数据库中。

/**
 * 批量插入用户数据
 */
private boolean saveUsers(List<ImportUser> users) {

    //存放user
    List<UserEntity> userList = new ArrayList<>();

    //转成user实体
    for (ImportUser user : users) {
        UserEntity userEntity = new UserEntity(user);
        userList.add(userEntity);
    }
    //批量插入
    return this.saveBatch(userList);
}

5、postman测试接口

       第一步:先将url填写完整,然后参数传入,选择Body-->form-data;以数据表格的方式提交,然后参数填写你固定的参数名,譬如我的:file,参数类型选择file而不是默认的text文本,其value选择你刚才创建好的excel导入文件,选择添加即可。

具体演示如下:

       第二步:点击Send,请求接口。查看接口结果返回。

       再查看一下控制台sql执行打印,具体如下:说明没有问题,没有报错。

      如上表示,返回结果为true,则证明你所excel中的数据成功入库,如果你不放心,最直接的办法就是你登录mysql数据库,自己去表里查看excel数据是否都在表内,若是数据量多大,你也可以直接执行sql进行查询。

       第三步:连接数据库,查看数据是否插入入库。

       ... ...

       好啦,以上就是本期的全部内容啦,下期我们接着将如何通过easypoi实现excel导出,敬请期待吧~咱们下期见。

四、往期热门推荐

       如果还想要学习更多,小伙伴们可关注bug菌专门为大家创建的专栏《SpringBoot零基础入门》,从无到有,从零到一!希望能帮到大家。

**************************************************

☘️做你想做的人,没有时间限制,只要愿意,什么时候都可以start,

🍀你能从现在开始改变,也可以一成不变,这件事,没有规矩可言,你可以活出最精彩的自己。

**************************************************

💌如果文章对您有所帮助,就请留下您的吧!(#^.^#);

💝如果喜欢bug菌分享的文章,就请给bug菌点个关注吧!(๑′ᴗ‵๑)づ╭❤~;

💗如果对文章有任何疑问,还请文末留言或者加群吧【QQ交流群:708072830】;

💞鉴于个人经验有限,所有观点及技术研点,如有异议,请直接回复参与讨论(请勿发表攻击言论,谢谢);

💕版权声明:原创不易,转载请附上原文出处链接和本文声明,版权所有,盗版必究!!!谢谢。

分类:
后端
标签:
分类:
后端
标签:
收藏成功!
已添加到「」, 点击更改