这是一个JAVA spring boot项目,请写出从excel批量读取数据并存入数据库的代码
时间: 2025-01-06 15:48:20 浏览: 5
在Java Spring Boot项目中,使用Apache POI库可以读取Excel文件,JPA或Spring Data JPA用于将数据持久化到数据库。下面是一个简单的示例代码,假设你已经设置了数据访问层(Repository接口),并且有一个User实体映射到数据库表中:
```java
import org.apache.poi.ss.usermodel.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.io.Resource;
import org.springframework.stereotype.Component;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
@Component
public class ExcelToDatabaseRunner implements CommandLineRunner {
@Autowired
private UserRepository userRepository; // 用户Repository
@PersistenceContext
private EntityManager entityManager; // 数据管理对象
@Autowired
private Resource excelFileResource; // Excel文件路径
@Override
public void run(String... args) {
try (InputStream inputStream = excelFileResource.getInputStream();
Workbook workbook = new XSSFWorkbook(inputStream)) {
Sheet sheet = workbook.getSheetAt(0); // 假设只有一个工作表
for (Row row : sheet) {
if (row.getRowNum() == 0) { // 首行通常包含列名,跳过
continue;
}
User user = new User(); // 新建一个User对象
int cellIndex = 0;
for (Cell cell : row) {
switch (cell.getCellType()) {
case STRING:
String value = cell.getStringCellValue();
switch (cellIndex) {
case 0: // 假定第一列是ID
break;
case 1: // 假定第二列是用户名
user.setUsername(value);
break;
// ... 添加更多的列对应属性
}
break;
// 其他数据类型(数值、日期等)类似处理
}
cellIndex++;
}
// 保存到数据库
userRepository.save(user);
}
entityManager.flush(); // 提交事务
} catch (IOException | InstantiationException | IllegalAccessException e) {
e.printStackTrace();
}
}
}
```
注意这只是一个基本示例,实际操作中你可能需要处理更复杂的数据结构,并对错误和异常进行更好的处理。同时,为了安全起见,最好使用`@Transactional`注解来包裹`run`方法,确保数据一致性。
阅读全文