springboot实现 将execl文件上传后 字段对应的存入MySQL数据库

  • demo结构
    • 新建一个数据库
    • maven中一般的插件就不说了主要要加上这几个 来实现读excel
    • 利用mybatis-generator自动生成dao层和User实体类以及mapper映射文件
    • 再附上一个辅助的类
    • 进入正题 开始编写service层
    • service接口实现类的编写
    • 这里读取excel内容用到的一个工具类 ExcelUtil 编写如下
    • 最后编写controller
    • 现在来试一下效果
    • 利用Postman上传该excel 文件
    • 查看数据库内数据

demo结构

最近项目需要下载一个excel模板 填入数据后上传 将模板内数据读入mysql 所以写了个小demo来验证技术是否可行

这个demo就是简单的实现将excel字段转存mysql 没有其他业务需求

新建一个数据库

一张表

uid为主键 自增 都为非空

maven中一般的插件就不说了主要要加上这几个 来实现读excel

其余的就mysql jdbc等常规的 就不贴出来了

 <!--poi--><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.9</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.9</version></dependency><!--上传下载的包--><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.1</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></dependency>

利用mybatis-generator自动生成dao层和User实体类以及mapper映射文件

如果不会用 请看之前的博客
链接:https://blog.csdn.net/qq_43561507/article/details/96482517

贴上User

package com.excel.entity;import java.io.Serializable;public class User implements Serializable {private Integer uid;private String username;private String password;private static final long serialVersionUID = 1L;public Integer getUid() {return uid;}public void setUid(Integer uid) {this.uid = uid;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username == null ? null : username.trim();}public String getPassword() {return password;}public void setPassword(String password) {this.password = password == null ? null : password.trim();}@Overridepublic String toString() {StringBuilder sb = new StringBuilder();sb.append(getClass().getSimpleName());sb.append(" [");sb.append("Hash = ").append(hashCode());sb.append(", uid=").append(uid);sb.append(", username=").append(username);sb.append(", password=").append(password);sb.append(", serialVersionUID=").append(serialVersionUID);sb.append("]");return sb.toString();}
}

再附上一个辅助的类

package com.excel.entity;import lombok.Data;/*** @author: zty* @date 2019/9/5 下午12:19* des:用于存放excel的相关信息*/
@Data
public class ReadExcel {//总行数private int totalRows = 0;//总条数private int totalCells = 0;//错误信息收集private String errorMsg;
}

进入正题 开始编写service层

package com.excel.service;import com.excel.entity.User;
import org.springframework.web.multipart.MultipartFile;/*** @author: zty* @date 2019/9/5 下午12:01* des:*/
public interface UserService {/*** 插入*/int insert(User user);/*** 读取excel文件*/String readExcelFile(MultipartFile file);
}

service接口实现类的编写

package com.excel.service.Impl;import com.excel.dao.UserMapper;
import com.excel.entity.User;
import com.excel.service.UserService;
import com.excel.util.ExcelUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;import java.util.List;/*** @author: zty* @date 2019/9/5 下午12:06* des:*/
@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Overridepublic int insert(User user) {return userMapper.insert(user);}/*** 文件导入* @param file* @return*/@Overridepublic String readExcelFile(MultipartFile file) {String result = "";ExcelUtil excelUtil = new ExcelUtil();List<User> ilist = excelUtil.getExcelInfo(file);if(ilist != null && !ilist.isEmpty()){//不为空 加入数据库for(User user :ilist){userMapper.insert(user);}result = "上传成功";}else{result = "上传失败";}return result;}
}

这里读取excel内容用到的一个工具类 ExcelUtil 编写如下

package com.excel.util;import com.excel.entity.ReadExcel;
import com.excel.entity.User;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.web.multipart.MultipartFile;import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;/*** @author: zty* @date 2019/9/5 下午12:12* des:*/
public class ExcelUtil {/*** 先创建一个实体类*/ReadExcel readExcel = new ReadExcel();/*** 读取Excel文件,获取信息集合* @param mFile* @return*/public List<User> getExcelInfo(MultipartFile mFile) {//获取文件名String fileName = mFile.getOriginalFilename();List<User> ilist = null;try {//验证文件名是否合格if(!validateExcel(fileName)){//不合格的话直接returnreturn null;}//根据文件名判断是2003版本的还是2007版本的boolean isExcel2003 = true;if(isExcel2007(fileName)){isExcel2003 = false;}ilist= createExcel(mFile.getInputStream(), isExcel2003);} catch (Exception e) {e.printStackTrace();}return ilist;}/*** 判断是不是2003版本的excel* @param filePath* @return*/public static boolean isExcel2003(String filePath){return filePath.matches("^.+\\.(?i)(xls)$");}/*** 判断是不是2007版本的excel* @param filePath* @return*/public static boolean isExcel2007(String filePath){return filePath.matches("^.+\\.(?i)(xlsx)$");}/*** 判断是不是excel文件格式* @param filePath* @return*/public boolean validateExcel(String filePath){if(filePath ==null||!(isExcel2003(filePath) || isExcel2007(filePath))){readExcel.setErrorMsg("文件名不是excel格式");return false;}return true;}/*** 读取excel里面的信息*/public List<User> readExcelValue(Workbook wb){List<User> ilist=new ArrayList<>();//先得到一个sheetSheet sheet = wb.getSheetAt(0);//得到excel里面的行数int totalRows = sheet.getPhysicalNumberOfRows();readExcel.setTotalRows(totalRows);//得到excel里面的列,前提是有行//大于1是因为我从第二行就是数据了,这个大家看情况而定if(totalRows >1 && sheet.getRow(0)!=null){int totalCells = sheet.getRow(0).getPhysicalNumberOfCells();readExcel.setTotalCells(totalCells);}for (int r = 1 ; r < totalRows; r++){Row row = sheet.getRow(r);if(row == null){continue;//如果行为空的话直接中断}User user = new User();//循环xcel的列for(int c = 0; c<readExcel.getTotalCells() ; c++){Cell cell = row.getCell(c);if(cell != null){//根据excel需要导入的列数来写if(c == 0){if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){//如果是纯数字,比如你写的是38,//cell.getNumericCellValue()获得是38.0,//通过截取字符串去掉.0获得25String name = String.valueOf(cell.getNumericCellValue());//截取如果length()-2为零了,就说明只有一位数,就直接截取0到1就行user.setUsername(name.substring(0,name.length()-2>0?name.length()-2:1));}else{//如果不是纯数字可以直接获得名称user.setUsername(cell.getStringCellValue());}}else if (c == 1){if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){String firstDept = String.valueOf(cell.getNumericCellValue());user.setPassword(firstDept.substring(0,firstDept.length()-2>0?firstDept.length()-2:1));}else{user.setPassword(cell.getStringCellValue());}}}}//最后将这些全部添加到ilist中ilist.add(user);}return ilist;}public List<User> createExcel(InputStream is , boolean isExcel2003){List<User> ilist = null;try {Workbook wb = null;if(isExcel2003){//如果是2003版本的就new一个2003的wb出来wb = new HSSFWorkbook(is);}else{//否则就new 一个2007版的出来wb = new XSSFWorkbook(is);}//再让wb去解析readExcelValue(Workbook wb)方法ilist = readExcelValue(wb);} catch (Exception e) {e.printStackTrace();}return ilist;}
}

注意判断excel版本

最后编写controller

package com.excel.controller;import com.excel.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/*** @author: zty* @date 2019/9/5 下午1:08* des:*/
@RestController
@RequestMapping(value = "/excel")
public class UserController {@Autowiredprivate UserService userService;@PostMapping("/upload")public String uploadExcel(@RequestParam(value = "file")MultipartFile file, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse){String result = userService.readExcelFile(file);return result;}
}

附上yml配置

是基础的实现

现在来试一下效果


现在数据库里字段为空

我们来编辑excel文件(注意第一排为提供的模板 需要根据该模板来填 第一排不读入数据库)

利用Postman上传该excel 文件

post请求 利用form-data表单上传

回显示上传成功

查看数据库内数据


成功!
demo下载地址https://download.csdn.net/download/qq_43561507/11672457

springboot实现excel模板存入mysql数据库 附demo地址相关推荐

  1. python读取串口数据保存到mysql数据库_Python3读取Excel数据存入MySQL的方法

    Python是数据分析的强大利器. 利用Python做数据分析,第一步就是学习如何读取日常工作中产生各种excel报表并存入数据中,方便后续数据处理. 这里向大家分享python3如何使用xlrd读取 ...

  2. php读取excel存入mysql数据库_PHP将Excel内容导入mysql数据库

    PHP将Excel内容导入mysql数据库 注:本文技术含量较低,是通过别人写的一个类来完成的,所以不要用金砖砸我.小生我怕怕!!! 1.首先需要一个读取excel的类(在附件中) 2.附件中有3个文 ...

  3. 高德地图交通态势爬取并存入MySQL数据库

    高德地图交通态势爬取并存入mysql数据库 高德地图交通态势开放api链接: 高德交通态势 高德地图交通态势使用流程: 第一步,申请"Web服务API接口"密钥(Key): 第二步 ...

  4. excel 导入mysql_如何将Excel文件导入MySQL数据库

    本文实例为大家分享了Excel文件导入MySQL数据库的方法,供大家参考,具体内容如下 1.简介 本博客给大家分享一个实用的小技能,我们在使用数据库时常常需要将所需的Excel数据添加进去,如果按照传 ...

  5. ZABBIX利用自带模板监控mysql数据库

    ***** ZABBIX利用自带模板监控mysql数据库**** 监控效果图 增删改查 慢查询 每秒总执行次数 1. 进入主题:先搭建好zabbix服务器,并把mysql作为agent端(建议先在线下 ...

  6. excel数据库_将excel文件导入mysql数据库教程(PHP实现)

    点击蓝字关注我们!每天获取最新的编程小知识! 源 / php中文网      源 / www.php.cn 在这篇文章中,我将给大家介绍如何使用PHP将excel文件导入mysql数据库.有时候我们需 ...

  7. php过滤数据库就报错,php过滤掉emoji等无法存入MySQL数据库的字符简单示例

    这篇文章主要为大家详细介绍了php过滤掉emoji等无法存入MySQL数据库的字符简单示例,具有一定的参考价值,可以用来参考一下. 对php过滤掉emoji等无法存入MySQL数据库的字符简单示例感兴 ...

  8. mysql数据库时间突然是12小时制_为什么存入mysql数据库中的timestamp,晚了13或14个小时...

    # 为什么存入mysql数据库中的timestamp,晚了13个小时 ## 查看数据库时区 ``` show variables like '%time_zone%'; select @@global ...

  9. 使用PhpSpreadsheet将Excel导入到MySQL数据库

    使用PhpSpreadsheet将Excel导入到MySQL数据库 日常开发中,我们经常遇到这样的场景,需要将一个Excel表格数据如客户信息.学生成绩表导入到系统数据库中,然后在系统中进行进一步操作 ...

最新文章

  1. Android EditText回车不换行
  2. 2015年最棒的10个 JavaScript 框架
  3. 为更好提高客户对产品的满意度需要搞好站点建设问题
  4. Office2013 分享
  5. Django中一个项目使用多个数据库(原生sql 的使用,亲测)
  6. 10年老电脑如何提速_电信宽带免费提速至200M,面向全国用户活动日期2020年11月9日至12月31日...
  7. 转: 用 Eclipse 平台进行 C/C++ 开发
  8. SAP Spartacus UserService.get方法的调用时机
  9. 闭包、装饰器与递归_月隐学python第12课
  10. 为Mac OS X添加用Firefox搜索服务
  11. python按行读取文件取消空白行_python去掉空白行的多种实现代码
  12. mac修改国内镜像源
  13. VB2010网络通信服务器
  14. NPDP产品经理认证考试培训资料--XISAI
  15. SAP中一次性客户及供应商的应用浅晰
  16. 算法工程师13——机器学习强化
  17. python在excel应用实例视频-超简单:用Python让Excel飞起
  18. html自动验证邮件地址格式,JavaScript表单验证和邮箱格式验证的方法
  19. python语言 表白程序_python编写的GUI表白小程序
  20. CDA数据分析浙江师范大学 第二期“正阳旅游大数据创新创业班”项目报告会顺利开启

热门文章

  1. 美狐讲堂:视频用直播用SDK盘点
  2. IntelliJ IDEA生产力工具 -- 源码注释翻译神器
  3. ​干货!影视剪辑大神常用避免侵权的8个秘籍首次公开【覃小龙课堂】
  4. test3_Huffman codes
  5. 关于项目监控看板HTML页面设计
  6. 计组 | 2020年 408计算机统考 计算机组成原理 真题解析
  7. DL-Paper精读:LSTM + Transformer 架构模型
  8. 去大厂面试软件测试看这55个问题就够了!
  9. wifi客流php源码,车站机场WIFI客流的简单数据分析
  10. 民事诉讼证据解读之视听资料、电子数据