快速在springboot项目中应用EasyExcel

目录

​编辑一、介绍

二、准备工作

三、初始化项目

3.1 创建项目 

3.2 引入依赖

3.3 创建数据库和数据表

 3.4 编写application.properties文件

 四、开始编写

4.1 目录结构

4.2 MyBatis配置类

4.3 用户实体类

 4.4 mapper接口

4.5 编写数据操作文件

 4.6  编写Service 业务层

 4.7 控制器层

4.8 编写主页面

五、运行

一、介绍

EasyExcel 是阿里巴巴开源的简化Excel文件读取和写入的开源库。主要的特点如下:

  • 简单易用的API:EasyExcel提供简单API,隐藏处理Excel文件的底层细节。
  • 注解支持:支持使用注解将Java对象映射到Excel列,便于Java对象和Excel数据之间进行转换。
  • 流式处理:采用流式处理的方式读取和写入大型 Excel 文件,能够有效处理大数据量。
  • 格式化:支持 Excel 的格式化特性,如单元格样式、字体、颜色、边框等。

官网:EasyExcel官方文档 - 基于Java的Excel处理工具 | Easy Excel 官网

二、准备工作

开发环境: JDK8

编辑器:IDEA

数据库:MySQL

数据库工具:Navicat

其他工具:Maven

三、初始化项目

3.1 创建项目 

首先需要在IDEA开发工具中创建一个SpringBoot项目。

请修改以下属性

Name:自定义

Type:Maven

Group:com.自定义

随后一路Next就可以

3.2 引入依赖

 复制以下内容,粘贴到pom.xml文件中

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.1</version>
        </dependency>

        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <version>8.0.31</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>4.0.1</version>
        </dependency>
    </dependencies>

3.3 创建数据库和数据表

创建一个名为excel_demo_db数据库,以及user数据表。

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

CREATE DATABASE `excel_demo_db`;
USE `excel_demo_db`;

DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) COLLATE utf8_bin DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

SET FOREIGN_KEY_CHECKS = 1;

 成功创建数据库和表后的数据结构如下:

 3.4 编写application.properties文件

# 配置数据库
spring.datasource.url=jdbc:mysql://localhost:3306/excel_demo_db?useSSL=false&serverTimezone=UTC
# 用户名
spring.datasource.username=你的数据库
# 密码
spring.datasource.password=你的密码
# 页面文件位置
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html

 四、开始编写

4.1 目录结构

4.2 MyBatis配置类

创建config包,在config 包下创建名为MyBatisConfig类,代码如下:

package com.saycode.demo.config;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import javax.sql.DataSource;

@Configuration
@MapperScan("com.saycode.demo.mapper") // 扫描Mapper接口所在的包
public class MyBatisConfig {

    @Bean
    public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource);

        Resource[] resources = new PathMatchingResourcePatternResolver()
                .getResources("classpath:mapper/*.xml");
        sessionFactory.setMapperLocations(resources);

        return sessionFactory.getObject();
    }
}

4.3 用户实体类

在entity包下创建User类,代码如下:

@ExcelProperty 便是EasyExcel 提供的注解,用于将 Java 对象的字段与 Excel 文件的列进行映射。

package com.saycode.demo.entity;

import com.alibaba.excel.annotation.ExcelProperty;

public class User {

    private Long id;

    @ExcelProperty("姓名")
    private String name;

    @ExcelProperty("年龄")
    private Integer age;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

 4.4 mapper接口

在mapper 包下创建UserMapper 接口,代码如下:

package com.saycode.demo.mapper;

import com.saycode.demo.entity.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;

import java.util.List;


public interface UserMapper {
    void insertUser(User user);

    List<User> getAllUsers();
}

4.5 编写数据操作文件

在resources 下创建mapper包,在mapper包中创建名为userMapper.xml的文件,用于编写sql语句。

<?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="com.saycode.demo.mapper.UserMapper">
    <resultMap id="userResultMap" type="com.saycode.demo.entity.User">
        <id column="id" property="id" />
        <result column="name" property="name" />
        <result column="age" property="age" />
    </resultMap>

    <select id="getAllUsers" resultMap="userResultMap">
        SELECT * FROM users
    </select>

    <insert id="insertUser">
        INSERT INTO users (name, age) VALUES (#{name}, #{age})
    </insert>
</mapper>

resources 目录如下:

 4.6  编写Service 业务层

在service包下创建 UserService类,代码如下:

package com.saycode.demo.service;

import com.saycode.demo.entity.User;
import com.saycode.demo.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    public void insertUser(User user) {
        userMapper.insertUser(user);
    }

    public List<User> getAllUsers() {
        return userMapper.getAllUsers();
    }
}

 4.7 控制器层

在controller 下创建一个名为UserExcelListener的类,这是一个自定义的监听器类,用于处理 Excel 文件读取时的事件和逻辑。

以及创建一个UserController 类,处理用户的请求。代码如下:

UserExcelListener

package com.saycode.demo.controller;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.saycode.demo.entity.User;
import com.saycode.demo.service.UserService;

public class UserExcelListener extends AnalysisEventListener<User> {

    private UserService userService;

    public UserExcelListener(UserService userService) {
        this.userService = userService;
    }

    @Override
    public void invoke(User user, AnalysisContext analysisContext) {
        userService.insertUser(user);
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
    }
}

 UserController

package com.saycode.demo.controller;

import com.alibaba.excel.EasyExcel;
import com.saycode.demo.entity.User;
import com.saycode.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;

@Controller
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/")
    public String index(Model model) {
        List<User> users = userService.getAllUsers();
        model.addAttribute("users", users);
        return "index";
    }

    @PostMapping("/upload")
    public String upload(MultipartFile file) {
        try {
            EasyExcel.read(file.getInputStream(), User.class, new UserExcelListener(userService)).sheet().doRead();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "redirect:/";
    }
}

4.8 编写主页面

在resources 下的 templates包中创建index.html文件,代码如下:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>用户列表信息</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            margin: 20px;
        }

        h1 {
            color: #333;
            text-align: center;
        }

        form {
            margin-bottom: 20px;
        }

        table {
            width: 80%;
            margin: 0 auto;
            border-collapse: collapse;
            border: 1px solid #ccc;
        }

        th, td {
            padding: 10px;
            text-align: left;
        }

        th {
            background-color: #f2f2f2;
        }

        tr:nth-child(even) {
            background-color: #f9f9f9;
        }

        input[type="file"] {
            margin-right: 10px;
        }

        button[type="submit"] {
            padding: 8px 16px;
            background-color: #4CAF50;
            color: white;
            border: none;
            cursor: pointer;
        }

        button[type="submit"]:hover {
            background-color: #45a049;
        }
    </style>
</head>
<body>
<h1>用户列表</h1>
<form action="#" th:action="@{/upload}" method="post" enctype="multipart/form-data">
    <input type="file" name="file" />
    <button type="submit">上传</button>
</form>
<table border="1">
    <tr>
        <th>姓名</th>
        <th>年龄</th>
    </tr>
    <tr th:each="user : ${users}">
        <td th:text="${user.name}"></td>
        <td th:text="${user.age}"></td>
    </tr>
</table>
</body>
</html>
</title>
</head>
<body>

</body>
</html>

五、运行

 在对应主程序类中,运行程序。

在浏览器中输入: localhost:8080 进行访问

 点击选择文件,选择excel文件。

文件格式如下:

序号姓名年龄
1张三20
2王五23

  • 23
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
是的,如果你想在SpringBoot项目使用EasyExcel读取对象List集合的数据进行导出功能,需要通过以下步骤添加EasyExcel的依赖版本3.0.5: 1. 在pom.xml文件添加EasyExcel的依赖: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>3.0.5</version> </dependency> ``` 2. 在实体类定义需要导出的List集合,例如: ```java public class User { private String name; private Integer age; private List<String> hobbies; // 省略getter和setter方法 } ``` 3. 在Controller编写导出Excel的方法,例如: ```java @GetMapping("/export") public void export(HttpServletResponse response) throws IOException { List<User> userList = userService.getUserList(); List<List<String>> data = new ArrayList<>(); for (User user : userList) { List<String> rowData = new ArrayList<>(); rowData.add(user.getName()); rowData.add(user.getAge().toString()); rowData.addAll(user.getHobbies()); data.add(rowData); } ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).build(); WriteSheet writeSheet = EasyExcel.writerSheet(0, "用户信息").build(); excelWriter.write(data, writeSheet); excelWriter.finish(); } ``` 在这个例子,我们首先获取了用户列表,然后将每个用户的信息以List<String>的形式添加到一个二维List。接着,使用EasyExcel的ExcelWriter将数据写入到Excel,并通过WriteSheet指定了导出的Sheet名称。最后,通过finish方法关闭ExcelWriter并将数据写入到输出流,实现导出Excel的功能。 希望这个例子可以帮助你使用EasyExcel实现导出对象List集合的数据到Excel的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小那同学

晚饭加鸡腿🍗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值