mysql预留字段easypoi_SpringBoot 导出数据生成excel文件返回方式

本文主要是介绍mysql预留字段easypoi_SpringBoot 导出数据生成excel文件返回方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、基于框架

1.IDE

IntelliJ IDEA

2.软件环境

Spring boot

mysql

mybatis

org.apache.poi

二、环境集成

1.创建spring boot项目工程

略过

2.maven引入poi

org.apache.poi

poi

3.17

org.apache.poi

poi-ooxml

3.17

org.apache.poi

poi-ooxml-schemas

3.17

三、代码实现

此处以导出云端mysql数据中的用户表为例(数据为虚假数据)

1.配置xls表格表头

此处我创建一个class(ColumnTitleMap)来维护需要导出的mysql表和xls表头显示的关系

代码注释已经清晰明了,就不再赘述

/**

* @desc:数据导出,生成excel文件时的列名称集合

* @author: chao

* @time: 2018.6.11

*/

public class ColumnTitleMap {

private Map columnTitleMap = new HashMap();

private ArrayList titleKeyList = new ArrayList ();

public ColumnTitleMap(String datatype) {

switch (datatype) {

case "userinfo":

initUserInfoColu();

initUserInfoTitleKeyList();

break;

default:

break;

}

}

/**

* mysql用户表需要导出字段--显示名称对应集合

*/

private void initUserInfoColu() {

columnTitleMap.put("id", "ID");

columnTitleMap.put("date_create", "注册时间");

columnTitleMap.put("name", "名称");

columnTitleMap.put("mobile", "手机号");

columnTitleMap.put("email", "邮箱");

columnTitleMap.put("pw", "密码");

columnTitleMap.put("notice_voice", "语音通知开关");

columnTitleMap.put("notice_email", "邮箱通知开关");

columnTitleMap.put("notice_sms", "短信通知开关");

columnTitleMap.put("notice_push", "应用通知开关");

}

/**

* mysql用户表需要导出字段集

*/

private void initUserInfoTitleKeyList() {

titleKeyList.add("id");

titleKeyList.add("date_create");

titleKeyList.add("name");

titleKeyList.add("mobile");

titleKeyList.add("email");

titleKeyList.add("pw");

titleKeyList.add("notice_voice");

titleKeyList.add("notice_email");

titleKeyList.add("notice_sms");

titleKeyList.add("notice_push");

}

public Map getColumnTitleMap() {

return columnTitleMap;

}

public ArrayList getTitleKeyList() {

return titleKeyList;

}

}

2.controller

提供对外接口,ExportDataController.java

package com.mcrazy.apios.controller;

import com.mcrazy.apios.service.ExportDataService;

import com.mcrazy.apios.service.UserInfoService;

import com.mcrazy.apios.util.datebase.columntitle.ColumnTitleMap;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpServletResponse;

import java.util.ArrayList;

import java.util.List;

import java.util.Map;

/**

* @desc:数据导出api控制器

* @author: chao

* @time: 2018.6.11

*/

@Controller

@RequestMapping(value = "/exportdata")

public class ExportDataController {

@Autowired

UserInfoService userInfoService;

@Autowired

ExportDataService exportDataService;

/**

* @api: /apios/exportdata/excel/

* @method: GET

* @desc: 导出数据,生成xlsx文件

* @param response 返回对象

* @param date_start 筛选时间,开始(预留,查询时并未做筛选数据处理)

* @param date_end 筛选时间,结束(预留,查询时并未做筛选数据处理)

*/

@GetMapping(value = "/excel")

public void getUserInfoEx(

HttpServletResponse response,

@RequestParam String date_start,

@RequestParam String date_end

) {

try {

List> userList = userInfoService.queryUserInfoResultListMap();

ArrayList titleKeyList= new ColumnTitleMap("userinfo").getTitleKeyList();

Map titleMap = new ColumnTitleMap("userinfo").getColumnTitleMap();

exportDataService.exportDataToEx(response, titleKeyList, titleMap, userList);

} catch (Exception e) {

//

System.out.println(e.toString());

}

}

}

3.service

(1).用户表数据

UserInfoMapper.java

package com.mcrazy.apios.mapper;

import com.mcrazy.apios.model.UserInfo;

import org.apache.ibatis.annotations.Mapper;

import java.util.List;

import java.util.Map;

@Mapper

public interface UserInfoMapper {

/**

* @desc 查询所有用户信息

* @return 返回多个用户List

* */

List> queryUserInfoResultListMap();

}

UserInfoMapper.xml

select * from user_info

UserInfoService.java

package com.mcrazy.apios.service;

import com.mcrazy.apios.mapper.UserInfoMapper;

import com.mcrazy.apios.model.UserInfo;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import java.util.List;

import java.util.Map;

@Service

public class UserInfoService {

@Autowired

UserInfoMapper userInfoMapper;

/**

* @desc 查询所有用户信息

* @return 返回多个用户List

* */

public List> queryUserInfoResultListMap() {

List> list = userInfoMapper.queryUserInfoResultListMap();

return list;

}

}

(2). 生成excel文件和导出

ExportDataService.java

package com.mcrazy.apios.service;

import com.mcrazy.apios.util.datebase.ExportExcelUtil;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import javax.servlet.http.HttpServletResponse;

import java.util.ArrayList;

import java.util.List;

import java.util.Map;

/**

* @desc:数据导出服务

* @author: chao

* @time: 2018.6.11

*/

@Service

public class ExportDataService {

@Autowired

ExportExcelUtil exportExcelUtil;

/*导出用户数据表*/

public void exportDataToEx(HttpServletResponse response, ArrayList titleKeyList, Map titleMap, List> src_list) {

try {

exportExcelUtil.expoerDataExcel(response, titleKeyList, titleMap, src_list);

} catch (Exception e) {

System.out.println("Exception: " + e.toString());

}

}

}

导出工具封装,ExportExcelUtil.java

package com.mcrazy.apios.util.datebase;

import com.mcrazy.apios.util.object.DateUtils;

import org.apache.poi.ss.usermodel.*;

import org.apache.poi.xssf.streaming.SXSSFWorkbook;

import org.springframework.stereotype.Service;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

import java.io.OutputStream;

import java.util.ArrayList;

import java.util.List;

import java.util.Map;

/**

* @desc:数据导出,生成excel文件

* @author: chao

* @time: 2018.6.12

*/

@Service

public class ExportExcelUtil {

public void expoerDataExcel(HttpServletResponse response, ArrayList titleKeyList, Map titleMap, List> src_list) throws IOException {

String xlsFile_name = DateUtils.currtimeToString14() + ".xlsx"; //输出xls文件名称

//内存中只创建100个对象

Workbook wb = new SXSSFWorkbook(100); //关键语句

Sheet sheet = null; //工作表对象

Row nRow = null; //行对象

Cell nCell = null; //列对象

int rowNo = 0; //总行号

int pageRowNo = 0; //页行号

for (int k=0;k

Map srcMap = src_list.get(k);

//写入300000条后切换到下个工作表

if(rowNo%300000==0){

wb.createSheet("工作簿"+(rowNo/300000));//创建新的sheet对象

sheet = wb.getSheetAt(rowNo/300000); //动态指定当前的工作表

pageRowNo = 0; //新建了工作表,重置工作表的行号为0

// -----------定义表头-----------

nRow = sheet.createRow(pageRowNo++);

// 列数 titleKeyList.size()

for(int i=0;i

Cell cell_tem = nRow.createCell(i);

cell_tem.setCellValue(titleMap.get(titleKeyList.get(i)));

}

rowNo++;

// ---------------------------

}

rowNo++;

nRow = sheet.createRow(pageRowNo++); //新建行对象

// 行,获取cell值

for(int j=0;j

nCell = nRow.createCell(j);

if (srcMap.get(titleKeyList.get(j)) != null) {

nCell.setCellValue(srcMap.get(titleKeyList.get(j)).toString());

} else {

nCell.setCellValue("");

}

}

}

response.setContentType("application/vnd.ms-excel;charset=utf-8");

response.setHeader("Content-disposition", "attachment;filename=" + xlsFile_name);

response.flushBuffer();

OutputStream outputStream = response.getOutputStream();

wb.write(response.getOutputStream());

wb.close();

outputStream.flush();

outputStream.close();

}

}

三、运行

至此,所有代码工作已经做完,把程序运行起来,在浏览器调用接口,会自动下载到电脑中

浏览器打开:

http://192.168.1.70:8080/apios/exportdata/excel/?time_start=2018-12-19&end_start=2018-12-19

效果

3bc8aac8e492a7e711a043fea88967b7.png

6c6a740b7c2fdbc3c68d14ada7e658e2.png

得到xlsx文件,查看数据

32d8dc67d90825f8839b25404ee93120.png

以上这篇SpringBoot 导出数据生成excel文件返回方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

这篇关于mysql预留字段easypoi_SpringBoot 导出数据生成excel文件返回方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/223608

相关文章

Spring boot整合dubbo+zookeeper的详细过程

《Springboot整合dubbo+zookeeper的详细过程》本文讲解SpringBoot整合Dubbo与Zookeeper实现API、Provider、Consumer模式,包含依赖配置、... 目录Spring boot整合dubbo+zookeeper1.创建父工程2.父工程引入依赖3.创建ap

Linux线程之线程的创建、属性、回收、退出、取消方式

《Linux线程之线程的创建、属性、回收、退出、取消方式》文章总结了线程管理核心知识:线程号唯一、创建方式、属性设置(如分离状态与栈大小)、回收机制(join/detach)、退出方法(返回/pthr... 目录1. 线程号2. 线程的创建3. 线程属性4. 线程的回收5. 线程的退出6. 线程的取消7.

SQL server数据库如何下载和安装

《SQLserver数据库如何下载和安装》本文指导如何下载安装SQLServer2022评估版及SSMS工具,涵盖安装配置、连接字符串设置、C#连接数据库方法和安全注意事项,如混合验证、参数化查... 目录第一步:打开官网下载对应文件第二步:程序安装配置第三部:安装工具SQL Server Manageme

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

全面掌握 SQL 中的 DATEDIFF函数及用法最佳实践

《全面掌握SQL中的DATEDIFF函数及用法最佳实践》本文解析DATEDIFF在不同数据库中的差异,强调其边界计算原理,探讨应用场景及陷阱,推荐根据需求选择TIMESTAMPDIFF或inte... 目录1. 核心概念:DATEDIFF 究竟在计算什么?2. 主流数据库中的 DATEDIFF 实现2.1

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录