java实现easyExcel下载数据库数据到本地

java实现easyExcel下载数据库数据到本地

一、easyExcel是什么

	EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。

二、maven依赖

 <!--        mysql驱动-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.47</version>
    </dependency>
    <!--        连接池-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.1.16</version>
    </dependency>
    <!--  easyExcel   -->
     <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>easyexcel</artifactId>
        <version>2.1.7</version>
    </dependency>
    <dependency>
        <groupId>tk.mybatis</groupId>
        <artifactId>mapper</artifactId>
        <version>4.1.5</version>
    </dependency>

代码结构

三、实体类

	@Data
	@AllArgsConstructor
	@NoArgsConstructor
	public class China {
	    @ExcelProperty(index = 0,value = "城市id")
	    private Integer id;
	    @ExcelProperty(index = 1,value = "城市名称")
	    private String name;
	    @ExcelProperty(index = 2,value = "城市代码")
	    private Integer pid;
	}

四、application.yml文件

server:
  port: 80

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:mysql://你的mysql数据库地址:3306/china?useUnicode=true&characterEncoding=UTF-8&useSSL=false
    username: 用户名
    password: 密码
mybatis:
  mapper-locations: classpath:com/mapper/*Mapper.xml
  type-aliases-package: com.entity

五、mapper层ChinaDao

public interface ChinaDao extends Mapper<China> {

}

六、1ChinaService

public interface ChinaService {
    public Integer chinaCount();

    public List<China> selectByCityPage(Integer no);
}

六、2业务逻辑ChinaServiceImpl

@Service
@Transactional
public class ChinaServiceImpl implements ChinaService {
@Resource
private ChinaDao chinaDao;

    @Transactional(propagation = Propagation.SUPPORTS)
    @Override
    public Integer chinaCount() {
        return chinaDao.selectCount(new China());
    }

    @Transactional(propagation = Propagation.SUPPORTS)
    @Override
    public List<China> selectByCityPage(Integer no) {
        Integer offSet = (no - 1) * 1000 + 1;
        RowBounds rowBounds = new RowBounds(offSet, 1000);
        return chinaDao.selectByRowBounds(new China(), rowBounds);
    }
}

七、测试SpringBootTest

@org.springframework.boot.test.context.SpringBootTest(classes = SpringBootMain.class)
@RunWith(SpringRunner.class)
public class SpringBootTest {

}

八、Test

public class Test extends SpringBootTest {
    @Resource
    private ChinaDao chinaDao;

    @Resource
    private ChinaService chinaService;

    @org.junit.Test
    public void test() {
        China china = new China();
        int i = chinaDao.selectCount(china);
        System.out.println(i);
    }

    @org.junit.Test
    public void Test2() {
        // 导出路径
        String path = "C:\\Users\\MI\\Desktop\\city.xls";
        // 数据总条数
        Integer count = chinaService.chinaCount();
        // 导出地址  页头格式
        ExcelWriter excelWriter = EasyExcel.write(path, China.class).build();
        // 判断当前分多少页
        Integer pageSize = count % 1000 == 0 ? count / 1000 : count / 1000 + 1;
        for (Integer page = 1; page <= pageSize; page++) {
            // 数据分页返回  1000页
            List<China> selectByCityPage = chinaService.selectByCityPage(page);
            WriteSheet test = EasyExcel.writerSheet("第【" + page + "】批次").build();
            // 写入
            excelWriter.write(selectByCityPage, test);
        }
        // 关闭
        excelWriter.finish();
        System.out.println("导出成功!");
    }
}

九、实现效果

在这里插入图片描述

很高兴为您解答这个问题!关于 Java 实现 easyexcel 读取数据导入数据库的例子,我可以提供一些参考: 1. 您可以先在项目中引入 easyexcel 的相关依赖,例如: <!-- 引入 easyexcel --> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>2.2.10</version> </dependency> 2. 创建一个实体类来存储 Excel 中的数据,例如: @Data public class ExcelData { @ExcelProperty(index = 0) private String name; @ExcelProperty(index = 1) private Integer age; @ExcelProperty(index = 2) private String gender; // 省略 getter 和 setter 方法 } 3. 在代码中使用 easyexcel 进行读取 Excel 数据,例如: public void readExcelData() throws IOException { InputStream inputStream = new FileInputStream("data.xlsx"); EasyExcel.read(inputStream, ExcelData.class, new ExcelDataListener()).sheet().doRead(); } 4. 实现一个监听器来处理读取到的数据,例如: public class ExcelDataListener extends AnalysisEventListener<ExcelData> { @Override public void invoke(ExcelData data, AnalysisContext context) { // 处理读取到的数据,可以写入数据库等操作 } @Override public void doAfterAllAnalysed(AnalysisContext context) { // 读取完成后的操作 } } 5. 在 invoke 方法中可以将读取到的数据写入数据库等操作,例如: @Override public void invoke(ExcelData data, AnalysisContext context) { // 将读取到的数据写入数据库 jdbcTemplate.update("INSERT INTO user (name, age, gender) VALUES (?, ?, ?)", data.getName(), data.getAge(), data.getGender()); } 希望以上内容能够对您有所帮助!如果您还有其他问题,欢迎提出。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值