springboot实现文件的上传并更新到数据库
在Spring Boot应用程序中,处理Excel文件并将其数据导入MySQL数据库,可以使用Apache POI库来读取Excel文件,并使用Spring Data JPA或MyBatis等ORM框架来处理数据库操作。在或中配置数据库连接。
·
在Spring Boot应用程序中,处理Excel文件并将其数据导入MySQL数据库,可以使用Apache POI库来读取Excel文件,并使用Spring Data JPA或MyBatis等ORM框架来处理数据库操作。
一、添加依赖
<dependencies>
<!-- Spring Boot Starter Data JPA -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- MySQL Connector -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<!-- Apache POI for Excel handling -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>
<!-- Spring Boot Starter Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Boot Starter Test -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
二、配置数据库连接
在application.properties
或application.yml
中配置数据库连接
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/your_database?characterEncoding=utf-8&serverTimezone=GMT%2B8
username: your_username
password: your_password
jpa:
hibernate:
ddl-auto: update
show-sql: true
三、实体类
定义一个实体类User
,对应数据库中的表:
import javax.persistence.*;
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
// Getters and setters
}
注:实体类必须有@Entity和@id注解
四、Repository接口
创建一个JPA Repository接口来处理数据库操作:
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
}
五、服务类
创建一个服务类来处理业务逻辑,包括读取Excel文件和保存数据到数据库:
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
@Service
public class ExcelService {
@Autowired
private UserRepository userRepository;
public void saveExcelData(MultipartFile file) throws IOException {
try (InputStream inputStream = file.getInputStream();
Workbook workbook = new XSSFWorkbook(inputStream)) {
// 获取第一个Sheet
Sheet sheet = workbook.getSheetAt(0);
Iterator<Row> rowIterator = sheet.iterator();
// 跳过表头
if (rowIterator.hasNext()) {
rowIterator.next();
}
// 用于存储所有用户数据
List<User> users = new ArrayList<>();
// 遍历每一行
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
User user = new User();
// 假设Excel表格的列顺序为:姓名、邮箱
user.setName(getCellValueAsString(row.getCell(0)));
user.setEmail(getCellValueAsString(row.getCell(1)));
users.add(user);
}
// 批量保存到数据库
userRepository.saveAll(users);
}
}
// 辅助方法:获取单元格的值并转换为字符串
private String getCellValueAsString(Cell cell) {
if (cell == null) {
return "";
}
switch (cell.getCellType()) {
case STRING:
return cell.getStringCellValue();
case NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) {
return cell.getDateCellValue().toString();
} else {
return String.valueOf(cell.getNumericCellValue());
}
case BOOLEAN:
return String.valueOf(cell.getBooleanCellValue());
case FORMULA:
return cell.getCellFormula();
default:
return "";
}
}
}
六、控制器
创建一个控制器来处理文件上传请求:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
@RestController
public class ExcelController {
@Autowired
private ExcelService excelService;
@PostMapping("/upload")
public String uploadFile(@RequestParam("file") MultipartFile file) {
if (file.isEmpty()) {
return "Please select a file to upload.";
}
try {
excelService.saveExcelData(file);
return "File uploaded and data saved successfully.";
} catch (IOException e) {
e.printStackTrace();
return "Failed to upload file: " + e.getMessage();
}
}
}
七、运行并测试应用程序
可以在IDE中运行Spring Boot应用程序,并使用POST请求将Excel文件上传到/upload
端点。例如,使用Postman、Apifox或curl:
例如:Excel表格内容如下:
姓名 | 邮箱 |
张 | 111@qq.com |
王 | 222@qq.com |
赵 | 333@qq.com |
1、使用Postman或者Apifox
- 选择
POST
请求。 - URL为:
http://localhost:8080/upload
。 - 在
Body
选项卡中,选择form-data
。 - 添加一个键
file
,类型选择File
,然后选择要上传的Excel文件。 - 点击
Send
按钮。
2、使用curl:
curl -X POST -H "Content-Type: multipart/form-data" -F "file=@path_to_your_file.xlsx" http://localhost:8080/upload
注意:
-
大文件处理:
- 如果Excel文件非常大,建议使用流式处理,避免一次性加载整个文件到内存中。
-
批量插入优化:
- 使用
saveAll
方法可以批量插入数据,但仍需注意数据库的性能限制。
- 使用

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)