springboot项目中怎么实现CSV文件上传,,根据CSV模版,上传数据保存到数据库city表
时间: 2024-01-07 20:03:02 浏览: 86
要实现CSV文件上传并将数据保存到数据库中,可以按照以下步骤进行:
1. 在Spring Boot项目中添加以下依赖:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>5.3</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
```
其中,`spring-boot-starter-web`用于实现Web应用程序,`opencsv`用于解析CSV文件,`spring-boot-starter-data-jpa`用于实现JPA数据访问。
2. 创建一个包含CSV文件模板的Java类,例如:
```java
public class CityCsvTemplate {
private String name;
private String countryCode;
private String district;
private int population;
// getter and setter methods
}
```
其中,`name`、`countryCode`、`district`和`population`对应CSV文件中的列名。
3. 创建一个Controller类,处理文件上传和数据保存的请求,例如:
```java
@RestController
public class CsvController {
@Autowired
private CityRepository cityRepository;
@PostMapping("/upload")
public ResponseEntity<?> uploadCsvFile(@RequestParam("file") MultipartFile file) {
try (Reader reader = new InputStreamReader(file.getInputStream())) {
CsvToBean<CityCsvTemplate> csvToBean = new CsvToBeanBuilder<CityCsvTemplate>(reader)
.withType(CityCsvTemplate.class)
.withIgnoreLeadingWhiteSpace(true)
.build();
List<CityCsvTemplate> cityCsvList = csvToBean.parse();
List<City> cities = new ArrayList<>();
for (CityCsvTemplate cityCsv : cityCsvList) {
City city = new City();
city.setName(cityCsv.getName());
city.setCountryCode(cityCsv.getCountryCode());
city.setDistrict(cityCsv.getDistrict());
city.setPopulation(cityCsv.getPopulation());
cities.add(city);
}
cityRepository.saveAll(cities);
return ResponseEntity.ok().build();
} catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
}
}
}
```
其中,`CityRepository`是一个JpaRepository,用于保存City实体类到数据库中。
4. 创建一个City实体类,例如:
```java
@Entity
@Table(name = "city")
public class City {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String countryCode;
private String district;
private int population;
// getter and setter methods
}
```
这样,就可以通过访问`/upload`接口上传CSV文件,并将数据保存到数据库的city表中了。
阅读全文