Spring Boot 中简单整合EasyExcel

最基础的内容,目标就是能用就行,其他还得大佬们自行研究api

  • 依赖项的整理
<!--easyExcel表格工具-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.1.1</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.5</version>
</dependency>
//其他的注解依赖项
<!--lombok-->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>
//其他均为SSM相关依赖
  • 创建entity实例
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
public class City implements Serializable {
    /**
     * 市id;
     */
    @ExcelProperty(index = 0, value="市id")
    private String cityId;
    /**
     * 市;
     */
    @ExcelProperty(index = 1, value="市")
    private String city;
}
* 注:这里涉及到该工具的注解@ExcelProperty
    * index指定了该属性在excel文件中的列数
    * value制定了该属性在excel文件中的列的表头

写出数据的操作

  • 下面操作是从我本地数据库中获取数据并装入list集合中
    • mapper
List<City> getAllCity();//获取所有城市
* xml
<!--    List<City> getAllCity();//获取所有城市-->
    <select id="getAllCity" resultType="cn.tedu.linli.entity.City">
        select city_id AS cityId,city
        from hat_city
    </select>
  • 获取数据
@Component
@Slf4j
public class EasyExcelTool {
    @Autowired
    HatCityMapper cityMapper;
    public List<City> getData(){
        //获取所有城市
        List<City> cities = cityMapper.getAllCity();
        log.info(cities.toString());
        return cities;
    }
}
  • 测试是否能将数据写入本地文件中
@Autowired
EasyExcelTool easyExcelTool;
@Test
public  void test() {
    //实现excel写操作
    //设置写入文件夹的地址和文件名
    String filePath = "D:/test.xlsx";
    //调用EasyExcel里面的方法实现写的操作
   EasyExcel.write(filePath, City.class).sheet("模板").doWrite(easyExcelTool.getData());
}
* 注:这里涉及的参数 filePath(文件路径),city.class 实体类的类对象,
doWrite的参数时Collection 集合,所以我使用getData进行集合的数据的获取

读取数据的操作

  • 首先要定义一个Excel监听器
/**
 * 监听器需要继承AnalysisEventListener<>,并重写其方法
 */
public class ExcelListener extends AnalysisEventListener<City> {
    @Override
    public void onException(Exception exception, AnalysisContext context) throws Exception {
        super.onException(exception, context);
    }
    /**
     * 一行一行的读取excel内容
     * @param city
     * @param analysisContext
     */
    @Override
    public void invoke(City city, AnalysisContext analysisContext) {
        System.out.println(city);//在这里可以进行自己想进行的其他操作
    }
    @Override
    public void extra(CellExtra extra, AnalysisContext context) {
        super.extra(extra, context);
    }
    /**
     * 读取完成后操作
     * @param analysisContext
     */
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        System.out.println("读取完成");
    }
    @Override
    public boolean hasNext(AnalysisContext context) {
        return super.hasNext(context);
    }
}
  • 测试读取数据



@Test
public void testRead(){
    //实现excel写操作
    //设置写入的文件位置
    String filePath = "D:/test.xlsx";
    //调用easyExcel里面的方法实现写操作
    //3个参数,第一个参数是文件名,第二个参数是实体类,第三个是传入我们写好的监听器对象
    EasyExcel.read(filePath,City.class,new ExcelListener()).sheet().doRead();
}

利用读取数据功能进行数据库数据的添加

  • entity
package cn.tedu.linli.entity;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.math.BigDecimal;
import java.util.Objects;
/**
 * table name:  hat_area
 * author name: 何某人
 * create time: 2022-06-07 07:35:54
 */ 
 @Data
public class HatArea implements Serializable{
   private Long id;
   /**
     * 地区id;
     */
   private String areaId;
   /**
     * 县区;
     */
   private String area;
   /**
     * 上一级;
     */
   private String father;
   /**
     * 修改时间
     */
   private LocalDateTime gmtModified;
   /**
     * 创建时间
     */
   private LocalDateTime gmtCreate;

  • mapper
int add(HatArea area);//添加区域
  • xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--此文件必须使用mapper作为根级节点, 根级节点有且只有一个-->
<!--namespace 属性: 必须的,用于指定此XML文件对应的接口,取值为接口的全限定名-->
<mapper namespace="cn.tedu.linli.mapper.HatAreaMapper">
    <!---->
    <!--    int add(HatArea area);//添加区域-->
    <insert id="add" useGeneratedKeys="true" keyProperty="id">
        insert into hat_area(id,
                               area_id,
                               area,
                               father)
        values (#{id}, #{areaId}, #{area}, #{father})
    </insert>
</mapper>

  • 监听器ExcelListenerForArea
package cn.tedu.linli.util;
import cn.tedu.linli.entity.HatArea;
import cn.tedu.linli.mapper.HatAreaMapper;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.alibaba.excel.metadata.CellExtra;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class ExcelListenerForArea extends AnalysisEventListener<HatArea> {
    @Autowired
    HatAreaMapper hatAreaMapper;
    @Override
    public void onException(Exception exception, AnalysisContext context) throws Exception {
        super.onException(exception, context);
    }
    @Override
    public void invoke(HatArea data, AnalysisContext context) {
        hatAreaMapper.add(data);
        log.info("添加区域id:{}", data.getId());
    }
    @Override
    public void extra(CellExtra extra, AnalysisContext context) {
        super.extra(extra, context);
    }
    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        System.out.println("添加完成");
    }
    @Override
    public boolean hasNext(AnalysisContext context) {
        return super.hasNext(context);
    }
}
  • test测试
@Autowired
ExcelListenerForArea excelListenerForArea;
@Test
public void testReadArea(){
    String filePath = "D:/hat_area.xlsx";//本地文件位置
    EasyExcel.read(filePath, HatArea.class,excelListenerForArea).sheet().doRead();
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值