import-export数据导入导出插件
实现原理
基于easyexcel整合yutool-orm组件的基础能力,设计并开发了import-export数据导入导出插件。通过ImportTemplate和ExportTemplate模版工具类实现了一行代码实现导入导出功能。
- ImportTemplate模版方法:
java
// 导入数据
public <ID extends Serializable, T extends BaseEntity<ID, T>, D extends BaseDto<ID>> ImportResult importData(MultipartFile file, @NonNull ImportProps<ID, T, D> importProps);
// 导入数据,失败回写校验信息
public <ID extends Serializable, T extends BaseEntity<ID, T>, D extends BaseDto<ID>> void importDataOrWriteBack(MultipartFile file, @NonNull ImportWriteBackProps<ID, T, D> importWriteBackProps, HttpServletResponse response);1
2
3
4
5
2
3
4
5
ImportProps配置项clazz: 导入数据类型readListener: 读监听器dataService: 导入数据类型对应的ServicebatchSize: 单次批量导入数据条数excelType: Excel文件类型sheetNo: sheet序号,优先级高于sheetNamesheetName: sheet名称headRowNumber: 指定表格头行数,默认1
ImportWriteBackProps配置项clazz: 导入数据类型readListener: 读监听器dataService: 导入数据类型对应的ServicebatchSize: 单次批量导入数据条数excelType: Excel文件类型sheetNo: sheet序号,优先级高于sheetNamesheetName: sheet名称headRowNumber: 指定表格头行数,默认1onlyFailData:true:校验成功的数据会正常保存,校验失败的数据则导出至Excel文件;false:所有数据都校验成功会全部保存,反之只要存在校验不通过的数据则所有数据都不保存并导出至Excel文件。
ExportTemplate模版方法:
java
// 根据导出数据类结构导出数据
public <V extends BaseVo> void exportData(List<V> list, @NonNull ExportProps<V> exportProps, OutputStream outputStream);
// 根据Excel导出模版填充字段导出数据
public <V extends BaseVo> void fillData(List<V> list, @NonNull ExportProps<V> exportProps, OutputStream outputStream);
// Web导出数据
public <V extends BaseVo> void export(List<V> list, @NonNull ExportProps<V> exportProps, HttpServletResponse response);1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
ExportProps配置项clazz: 导出数据类型sheetNo: sheet序号sheetName: sheet名称limitSize: 限制导出条数exceedLimitThrowEx: 超出限制条数是否抛出异常,默认抛出异常templateFile: 导出数据Excel模版文件路径filename: 导出文件名
快速上手
1. Maven依赖
在项目的 pom.xml 中添加以下依赖:
xml
<parent>
<groupId>com.yupaits</groupId>
<artifactId>yutool-parent</artifactId>
<version>${yutool.version}</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>com.yupaits</groupId>
<artifactId>import-export</artifactId>
</dependency>
</dependencies>1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
2. 注入ImportTemplate和ExportTemplate实现数据导入导出
java
@Service("dataService")
public class DataServiceImpl extends MybatisServiceImpl<Long, Data, DataMapper> implements DataService {
private final ImportTemplate importTemplate;
private final ExportTemplate exportTemplate;
@Autowired
public DataServiceImpl(OptService optService, AuditLogger auditLogger, ImportTemplate importTemplate, ExportTemplate exportTemplate) {
super(Data.class, optService, auditLogger);
this.importTemplate = importTemplate;
this.exportTemplate = exportTemplate;
}
@Override
@Transactional(rollbackFor = {Exception.class})
public Result<ImportResult> importData(MultipartFile file) {
return ResultWrapper.success(importTemplate.importData(file, ImportProps.<Long, Data, DataDto>builder().clazz(DataDto.class).dataService(this).build()));
}
@Override
public void exportData(HttpServletResponse response, DataQuery query) throws IOException {
exportTemplate.export(listVo(query.buildNewLambdaQuery()), ExportProps.<DataVo>builder().clazz(DataVo.class)
.filename(String.format("导出数据_%s.xlsx", LocalDate.now(DateTimeConstants.ZONE_ID).toString())).build(), response);
}
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
评论区留言准则:
1. 本评论区禁止传播封建迷信、吸烟酗酒、低俗色情、赌博诈骗等任何违法违规内容。
2. 当他人以不正当方式诱导打赏、私下交易,请谨慎判断,以防人身财产损失。
3. 请勿轻信各类招聘征婚、代练代抽、私下交易、购买礼包码、游戏币等广告信息,谨防网络诈骗。