当前位置: 首页 > news >正文

ruoyi-flowable-plus Excel 导入数据 Demo

📁 项目结构简述

ruoyi-flowable-plus 是基于 RuoYi 的扩展项目,使用:

  • 后端:Spring Boot + MyBatis + Flowable
  • 前端:Vue.js

📥 Excel 导入功能 Demo

导入用户数据为例,展示完整导入流程。

✅ 后端实现(Java)

1. Maven 依赖(pom.xml)

<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.3</version>
</dependency>

2. 控制器层(UserController.java)

@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@PostMapping("/import")public AjaxResult importUser(@RequestParam("file") MultipartFile file) {try {List<User> userList = userService.importExcel(file.getInputStream());return AjaxResult.success("导入成功", userService.saveBatch(userList));} catch (Exception e) {return AjaxResult.error("导入失败:" + e.getMessage());}}
}

3. 服务层(UserService.java)

@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public List<User> importExcel(InputStream inputStream) throws Exception {Workbook workbook = new XSSFWorkbook(inputStream);Sheet sheet = workbook.getSheetAt(0);List<User> list = new ArrayList<>();for (int i = 1; i <= sheet.getLastRowNum(); i++) {Row row = sheet.getRow(i);User user = new User();user.setUserName(getCellValue(row, 0));user.setNickName(getCellValue(row, 1));user.setEmail(getCellValue(row, 2));user.setPassword(getCellValue(row, 3));list.add(user);}return list;}private String getCellValue(Row row, int cellIndex) {Cell cell = row.getCell(cellIndex);if (cell == null) return "";return cell.toString();}public boolean saveBatch(List<User> list) {return userMapper.insertBatch(list) > 0;}
}

4. Mapper 层(UserMapper.java)

public interface UserMapper {int insertBatch(@Param("list") List<User> list);
}

5. Mapper XML(UserMapper.xml)

<insert id="insertBatch">INSERT INTO sys_user (user_name, nick_name, email, password)VALUES<foreach collection="list" item="item" separator=",">(#{item.userName}, #{item.nickName}, #{item.email}, #{item.password})</foreach>
</insert>

✅ 前端实现(Vue.js)

1. 页面组件(user/import.vue)

<template><div><el-uploadaction="/api/user/import":headers="headers":on-success="handleSuccess":on-error="handleError":limit="1"accept=".xlsx,.xls"><el-button type="primary">导入Excel</el-button></el-upload></div>
</template><script>
export default {data() {return {headers: {Authorization: 'Bearer ' + this.$store.getters.token}};},methods: {handleSuccess(response) {this.$message.success("导入成功");console.log(response);},handleError(error) {this.$message.error("导入失败:" + error.message);}}
};
</script>

🧪 示例 Excel 表格格式

用户名昵称邮箱密码
admin管理员admin@example.com123456
user1用户1user1@example.com123456

✅ 总结

模块内容
后端技术Spring Boot + MyBatis + Apache POI
前端技术Vue + Element UI
核心功能Excel 数据导入数据库
示例实体User 对象
示例接口/user/import

提示:如需集成到其他模块(如部门、岗位、流程等),可复用此结构,仅需替换实体类和Mapper。

http://www.dtcms.com/a/290099.html

相关文章:

  • 微软CEO Satya Nadella提出AI重构法则:从范式跃迁到社会盈余
  • DeepSeek vs ChatGPT:谁更胜一筹?
  • 添加状态信息
  • AI+Python | 长时序植被遥感:动态·物候·变异归因·RSEI生态评估全流程[特殊字符]
  • 【Unity优化】Unity多场景加载优化与资源释放完整指南:解决Additive加载卡顿、预热、卸载与内存释放问题
  • Taro 路由相关 API 详解与实战
  • 深入解析IP协议:组成、地址管理与路由选择
  • XSS学习总结
  • 【算法笔记】树状数组
  • 学习秒杀系统-异步下单(包含RabbitMQ基础知识)
  • Linux——自制shell命令行解释器
  • CMakeLists.txt 中一些最常见和核心的命令
  • GC9118S低压单通道全桥驱动器芯片详解
  • Effective Modern C++ 条款15:尽可能的使用constexpr
  • 17 BTLO 蓝队靶场 Pretium 解题记录
  • Windows GCC修改链接脚本文件实现section块存储函数
  • LVS 集群技术基础
  • docker--挂载
  • Docker安装Elasticsearch 7.17.0和Kibana 7.17.0并配置基础安全
  • 悬镜安全将受邀参加2025开放原子开源生态大会
  • Curtain e-locker 易锁防泄密:无需网络隔离,实现安全与效率并存
  • 量子生成对抗网络:量子计算与生成模型的融合革命
  • uni-api交互反馈组件(showToast)的用法
  • 宝塔面板Nginx报错: IP+端口可以直接从访问,反向代理之后就504了 Gateway Time-out
  • 农村供水智慧化管理系统:从精准监测到智能调度,破解农村用水安全与效率难题
  • MySQL 事务死锁排查:从日志分析到解决实战
  • 某日在某个月份中不存在导致软件出现异常的问题排查(判断闰年以及月份中的天数,附完整源码)
  • 低代码平台能否完全取代传统前端开发
  • Bun v1.2.19发布,node_modules隔离,sql比node快6倍
  • MySQL:表的增删查改