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

公司网站建设佛山哪家好哪里可以检测胎儿性别

公司网站建设佛山哪家好,哪里可以检测胎儿性别,有限责任公司是私企吗,桐城市住房和城乡建设局网站🛠️ 工具简介 本文介绍一款基于 EasyPOI 和 Apache POI SXSSF 的批量Excel导出工具类 BatchExcelExporter,支持大数据量分页处理,避免内存溢出(OOM),适合百万级数据导出场景。 📌 环境准备 1…

🛠️ 工具简介

本文介绍一款基于 EasyPOIApache POI SXSSF 的批量Excel导出工具类 BatchExcelExporter,支持大数据量分页处理,避免内存溢出(OOM),适合百万级数据导出场景。


📌 环境准备

1. 引入Maven依赖

pom.xml 中添加以下依赖(确保使用最新版本):

<!-- EasyPOI 核心库 -->
<dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><version>4.4.0</version>
</dependency><!-- Apache POI (SXSSF 需要) -->
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.3</version>
</dependency>
2. 引入工具类
import cn.afterturn.easypoi.excel.annotation.Excel;
import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity;
import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;import java.io.FileOutputStream;
import java.lang.reflect.Field;
import java.util.*;
import java.util.stream.Collectors;public class BatchExcelExporter<T> {private final SXSSFWorkbook workbook;private final Class<T> clazz;private final List<ExcelExportEntity> exportEntities = new ArrayList<>();private int currentRowIndex = 0;public BatchExcelExporter(Class<T> clazz) {this.clazz = clazz;this.workbook = new SXSSFWorkbook(100); // 缓存100行到磁盘initHeader();}// 初始化表头(仅执行一次)private void initHeader() {// 解析实体类注解List<Field> fields = Arrays.stream(clazz.getDeclaredFields()).filter(f -> f.isAnnotationPresent(Excel.class)).sorted(Comparator.comparing(f -> {Excel excel = f.getAnnotation(Excel.class);return excel.orderNum();})).collect(Collectors.toList());// 构建导出结构fields.forEach(f -> {Excel excel = f.getAnnotation(Excel.class);exportEntities.add(new ExcelExportEntity(excel.name(), f.getName(), 4000));});// 创建表头workbook.createSheet("数据").createRow(currentRowIndex++);addHeaderRow(workbook.getSheetAt(0).getRow(0));}// 添加表头行private void addHeaderRow(org.apache.poi.ss.usermodel.Row headerRow) {for (int i = 0; i < exportEntities.size(); i++) {headerRow.createCell(i).setCellValue(exportEntities.get(i).getName());}}// 批量添加数据(分页调用)public void addBatchData(List<T> batchData) throws Exception {org.apache.poi.ss.usermodel.Sheet sheet = workbook.getSheetAt(0);for (T data : batchData) {org.apache.poi.ss.usermodel.Row row = sheet.createRow(currentRowIndex++);fillDataRow(row, data);}// 每500行刷新到磁盘(根据数据量调整)if (currentRowIndex % 500 == 0) {((SXSSFSheet) sheet).flushRows(500);}}// 填充数据行(利用反射动态取值)private void fillDataRow(org.apache.poi.ss.usermodel.Row row, T data) throws Exception {for (int i = 0; i < exportEntities.size(); i++) {Field field = clazz.getDeclaredField((String) exportEntities.get(i).getKey());field.setAccessible(true);Object value = field.get(data);row.createCell(i).setCellValue(value != null ? value.toString() : "");}}// 最终写入文件public void exportToFile(String filePath) throws Exception {try (FileOutputStream fos = new FileOutputStream(filePath)) {workbook.write(fos);} finally {workbook.dispose(); // 清理临时文件}}
}

🚀 工具类核心功能

  1. 动态表头生成:通过解析实体类的 @Excel 注解自动生成表头。
  2. 分页批量写入:支持分批次添加数据,减少内存占用。
  3. 高性能处理:基于 SXSSFWorkbook,默认缓存100行到磁盘。

📝 使用示例

1. 定义实体类
public class User {@Excel(name = "姓名", orderNum = "0")private String name;@Excel(name = "年龄", orderNum = "1")private Integer age;@Excel(name = "邮箱", orderNum = "2")private String email;// 省略Getter/Setter
}
2. 调用工具类导出数据
public class ExcelExportDemo {public static void main(String[] args) throws Exception {// 初始化导出器(指定实体类)BatchExcelExporter<User> exporter = new BatchExcelExporter<>(User.class);// 模拟分页查询数据(假设每次查询1000条)for (int page = 1; page <= 10; page++) {List<User> batchData = queryUsersByPage(page, 1000);exporter.addBatchData(batchData);}// 导出到文件exporter.exportToFile("user_export.xlsx");}private static List<User> queryUsersByPage(int page, int size) {// 模拟数据库查询(此处返回测试数据)List<User> users = new ArrayList<>();for (int i = 0; i < size; i++) {users.add(new User("User" + i, 20 + i, "user" + i + "@example.com"));}return users;}
}

🧠 关键代码解析

1. 表头自动生成

通过反射解析实体类的 @Excel 注解,按 orderNum 排序后生成表头:

List<Field> fields = Arrays.stream(clazz.getDeclaredFields()).filter(f -> f.isAnnotationPresent(Excel.class)).sorted(Comparator.comparing(f -> f.getAnnotation(Excel.class).orderNum())).collect(Collectors.toList());
2. 数据分页写入

批量添加数据时,每500行刷新到磁盘(避免内存堆积):

public void addBatchData(List<T> batchData) throws Exception {// ... 填充数据 ...if (currentRowIndex % 500 == 0) {((SXSSFSheet) sheet).flushRows(500);  // 🚨 关键性能优化点!}
}

⚠️ 注意事项

  1. 字段类型匹配:确保实体类字段类型与Excel数据兼容(如日期格式需特殊处理)。
  2. 性能调优:根据服务器内存调整 SXSSFWorkbook 的缓存行数(默认100)。
  3. 异常处理:建议添加 try-catch 块捕获反射和IO异常。

🌟 效果展示

导出后的Excel文件示例:

姓名年龄邮箱
User020user0@example.com
User121user1@example.com

🔗 扩展优化方向

  1. 样式自定义:通过 SXSSFCellStyle 设置单元格样式(如背景色、边框)。
  2. 多Sheet支持:扩展工具类以支持多Sheet动态切换。
  3. 异步导出:结合线程池实现异步导出任务。

源码获取:文中的 BatchExcelExporter 完整代码已提供,可直接复制使用!

💬 互动话题:你在Excel导出中遇到过哪些坑?欢迎评论区交流!


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

相关文章:

  • 外贸网站平台下载内网建站教程
  • 浙江网站设计 site搜索引擎优化方法包括
  • 阿里云网站托管网站开发组合
  • 做跨境电商一件代发的网站广告优化
  • 做好门户网站建设曹县网站建设
  • 自己做网站好做么石家庄网站建设销售电话
  • 网站恢复网站建设的成本
  • strikingly建站工具云阳如何做网站
  • 加强网站建设的淘宝官网首页免费注册
  • 化妆品网站的建设方案大连营商建设局网站
  • 营销形网站汽车之家2023官网
  • 海南住房与城乡建设部网站wordpress指定ip登陆
  • 海南网站建设找哪家软件开发流程的具体内容
  • html5 网站模板网站中的二维码设计
  • 建设工程消防信息网站高职示范校建设专题网站
  • 海口网站建设解决方案快三彩票网站开发
  • WordPress网站图片预加载php网站在线打包源码
  • 网站做好是需要续费的吗如何借助网站打广告
  • 徐州网站开发服务承德seo
  • 交网站建设 域名计入什么科目国家水资源监控能力建设网站
  • 政务网站建设 紧急通知wordpress产品菜单
  • 怎样可以免费做网站网页图片抓取
  • 房产网站建设pptwordpress响应时间
  • 龙岗网站网站开发规格
  • 网站重新备案需要多长时间装潢设计图片大全
  • 如何建设一免费的网站如何推广自己的网站
  • 企业网站建设的方案ppt青岛关键词网站排名
  • 镇江地区做网站的公司有哪些衡阳网站设计ss0734
  • 网页设计制作网站总结wordpress化学式编辑插件
  • 长春建设平台网站的公司深圳龙华 网站建设