- 引入EasyExcel依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.2.5</version>
</dependency>
- 准备一个要导入的Excel文件
示例:
![在这里插入图片描述](https://img-blog.csdnimg.cn/fb6233e6a8a1442cabafedda134f6a58.png)
这是一个常见的组合商品的导入,对于一个组合商品有可能是多个商品组合而成,我们要在数据库里为它建立一对多的关联关系. - 建立一个读取Excel的实体
@Data
@AllArgsConstructor
@NoArgsConstructor
public class GiftBoxTempEntity {
@ExcelProperty(index = 0)
private Long id;
@ExcelProperty(index = 2)
private BigDecimal giftPrice;
@ExcelProperty(index = 3)
private Long goodsId;
@ExcelProperty(index = 5)
private BigDecimal price;
}
- EasyExcel读取所有的行数据
InputStream inputStream = multipartFile.getInputStream();
List<GiftBoxTempEntity> giftBoxTempEntityList = EasyExcel.read(inputStream).headRowNumber(2).head(GiftBoxTempEntity.class).sheet().doReadSync();
- 对读取到的数据进行处理
为了便于理解我们可以先看一下读取的数据是什么样的
![在这里插入图片描述](https://img-blog.csdnimg.cn/956550c84b864334865eed5cfadabbac.png)
可以看出,EasyExcel按照多的一方去读取,但对应的一的一方的数据只会被读取一次,要想让数据重新形成一对多的关系,我们只需要将后面一的一方为空的数据填充到它上一条一一方不为空的数据就可以了.
这边有个示例代码:
private static Map<Long, Map<Long, BigDecimal>> importGiftBoxTempEntity(List<GiftBoxTempEntity> giftBoxTempEntityList) {
Map<Long, Map<Long, BigDecimal>> mapNew = new HashMap<>();
Map<Long, BigDecimal> map = new HashMap(4);
GiftBoxTempEntity giftBoxTempEntityNew = new GiftBoxTempEntity();
for (GiftBoxTempEntity giftBoxTempEntity : giftBoxTempEntityList) {
if (null != giftBoxTempEntity.getId()) {
if (!map.isEmpty()) {
Long id = giftBoxTempEntityNew.getId();
Map<Long, BigDecimal> longBigDecimalMap = mapNew.get(id);
for (Map.Entry<Long, BigDecimal> longBigDecimalEntry : map.entrySet()) {
longBigDecimalMap.put(longBigDecimalEntry.getKey(),longBigDecimalEntry.getValue());
}
}
Map<Long, BigDecimal> longBigDecimalMap = new HashMap<>();
if (mapNew.containsKey(giftBoxTempEntity.getId())) {
longBigDecimalMap = mapNew.get(giftBoxTempEntity.getId());
}
map = new HashMap<>();
giftBoxTempEntityNew = giftBoxTempEntity;
Long goodsId = giftBoxTempEntity.getGoodsId();
BigDecimal price = giftBoxTempEntity.getPrice();
longBigDecimalMap.put(goodsId, price);
longBigDecimalMap.put(-1L,giftBoxTempEntity.getGiftPrice());
mapNew.put(giftBoxTempEntity.getId(),longBigDecimalMap);
} else {
map.put(giftBoxTempEntity.getGoodsId(), giftBoxTempEntity.getPrice());
}
}
return mapNew;
}