使用 hutool工具实现导入导出功能。

hutool工具网址

Hutool参考文档

pom依赖

复制代码
 <dependency>
     <groupId>cn.hutool</groupId>
     <artifactId>hutool-all</artifactId>
     <version>5.7.20</version>
 </dependency>
  <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-ooxml</artifactId>
      <version>4.1.2</version>
  </dependency>

导出接口

实体类属性加上@Alias注解,加上这个注解导入文件时表头是中文的也可以。

复制代码
用法:@Alias("用户名")

以下代码中有些注释掉的代码是其他的用法,@Alias注解这个方法比较方便,可能还有更好的方法大家自行探索。

user.java

复制代码
package com.qing.springboot.entity;

import cn.hutool.core.annotation.Alias;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;

import java.io.Serializable;
import java.time.LocalDateTime;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;


/**
 * <p>
 *
 * </p>
 *
 * @author Dong
 * @since 2024-07-20
 */
@Data
@TableName("sys_user" )
@ApiModel(value = "User对象", description = "" )
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty("id" )
    @TableId(value = "id", type = IdType.AUTO)
    @Alias("id")
    private Integer id;

    @ApiModelProperty("用户名" )
    @Alias("用户名")
    private String username;

    @ApiModelProperty("密码" )
    @Alias("密码")
    private String password;

    @ApiModelProperty("昵称" )
    @Alias("昵称")
    private String nickname;

    @ApiModelProperty("邮箱" )
    @Alias("邮箱")
    private String email;

    @ApiModelProperty("电话" )
    @Alias("电话")
    private String phone;

    @ApiModelProperty("地址" )
    @Alias("地址")
    private String address;

    @ApiModelProperty("创建时间" )
    @Alias("创建时间")
    private LocalDateTime createTime;

    @ApiModelProperty("头像" )
    @Alias("头像")
    private String avatarUrl;


}

UserController.java

复制代码
 /**
     * 导出接口
     */
    @GetMapping("/export")
    public void export(HttpServletResponse response) throws Exception {
        // 从数据库查询出所有的数据
        List<User> list = userService.list();
        // 通过工具类创建writer 写出到磁盘路径
//        ExcelWriter writer = ExcelUtil.getWriter(filesUploadPath + "/用户信息.xlsx");
        // 在内存操作,写出到浏览器
        ExcelWriter writer = ExcelUtil.getWriter(true);
        //自定义标题别名
//        writer.addHeaderAlias("username", "用户名");
//        writer.addHeaderAlias("password", "密码");
//        writer.addHeaderAlias("nickname", "昵称");
//        writer.addHeaderAlias("email", "邮箱");
//        writer.addHeaderAlias("phone", "电话");
//        writer.addHeaderAlias("address", "地址");
//        writer.addHeaderAlias("createTime", "创建时间");
//        writer.addHeaderAlias("avatarUrl", "头像");

        // 一次性写出list内的对象到excel,使用默认样式,强制输出标题
        writer.write(list, true);

        // 设置浏览器响应的格式
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
        String fileName = URLEncoder.encode("用户信息", "UTF-8");
        response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx");

        ServletOutputStream out = response.getOutputStream();
        writer.flush(out, true);
        out.close();
        writer.close();

    }

导入接口

复制代码
  /**
     * excel 导入
     * @param file
     * @throws Exception
     */
    @PostMapping("/import")
    public Boolean imp(MultipartFile file) throws Exception {
        InputStream inputStream = file.getInputStream();
        ExcelReader reader = ExcelUtil.getReader(inputStream);
//   方式1:(推荐) 通过 javabean的方式读取Excel内的对象,但是要求表头必须是英文(使用@Alias则中文的也可以),跟javabean的属性要对应起来
//        reader.addHeaderAlias("username", "用户名");
//        reader.addHeaderAlias("password", "密码");
//        reader.addHeaderAlias("nickname", "昵称");
//        reader.addHeaderAlias("email", "邮箱");
//        reader.addHeaderAlias("phone", "电话");
//        reader.addHeaderAlias("address", "地址");
//        reader.addHeaderAlias("createTime", "创建时间");
//        reader.addHeaderAlias("avatarUrl", "头像");
        List<User> list = reader.readAll(User.class);
        userService.saveBatch(list);

        // 方式2:忽略表头的中文,直接读取表的内容
//        List<List<Object>> list = reader.read(1);
//        List<User> users = CollUtil.newArrayList();
//
//        for (List<Object> row : list) {
//            User user = new User();
//            user.setUsername(row.get(0).toString());
//            user.setPassword(row.get(1).toString());
//            user.setNickname(row.get(2).toString());
//            user.setEmail(row.get(3).toString());
//            user.setPhone(row.get(4).toString());
//            user.setAddress(row.get(5).toString());
//            user.setAvatarUrl(row.get(6).toString());
//            users.add(user);
//        }
//        userService.saveBatch(users);
        return true;
    }

Vue上传文件

Vue中上传文件可以用element ui组件的组件。

vue导出

复制代码
<el-button type="primary" @click="exp" class="ml-5">导出 <i class="el-icon-top"></i></el-button>

exp() {
	window.open("http://localhost:9090/user/export")
}

vue导入

复制代码
<el-upload action="http://localhost:9090/user/import" :show-file-list="false" accept="xlsx" :on-success="handleExcelImportSuccess" style="display: inline-block">
  <el-button type="primary" class="ml-5">导入 <i class="el-icon-bottom"></i></el-button>
</el-upload>

handleExcelImportSuccess() {
    this.$message.success("导入成功")
    this.load()
}
相关推荐
SamRol15 分钟前
达梦数据库指令 及 在Spring Boot + MyBatis-Plus上的使用
java·数据库·spring boot·mybatis·达梦·intellij idea
啊吧怪不啊吧2 小时前
极致性能的服务器Redis之String类型及相关指令介绍
网络·数据库·redis·分布式·mybatis
风景的人生15 小时前
mybatis映射时候的注意点
java·mybatis
玄〤15 小时前
MyBatis-Plus 核心功能详解:条件构造器、Service 封装与批量优化实践(黑马springcloud微服务课程)(day2)
spring cloud·微服务·mybatis
loading小马21 小时前
Mybatis-Plus超级实用的多种功能用法
java·spring boot·后端·maven·mybatis
高山上有一只小老虎1 天前
mybatisplus分页查询版本 3.5.8 以下和版本 3.5.9及以上的区别
java·spring boot·mybatis
人道领域1 天前
javaWeb从入门到进阶(MyBatis拓展)
java·tomcat·mybatis
J2虾虾1 天前
SpringBoot和mybatis Plus不兼容报错的问题
java·spring boot·mybatis
pp起床2 天前
【苍穹外卖】Day03 菜品管理
java·数据库·mybatis
九皇叔叔2 天前
【01】SpringBoot3 MybatisPlus 工程创建
java·mybatis·springboot3·mybatis plus