чтение данных из Excel и сохранение в дБ с использованием пружинной загрузки jpa.
У меня есть Excel, который выглядит следующим образом.
address Name
---------------------
XYZ ABC
ZX BC
Мой класс обслуживания:
public class SpreadSheetService{
@Autowired
SpreadSheetRepo spreadSheetRepo;
private ModelMapper modelMapper=new ModelMapper() ;
public void readExcelSheet() throws IOException {
FileInputStream file = new FileInputStream(new File("src/main/resources/spreadsheet.xlsx"));
XSSFWorkbook workbook = new XSSFWorkbook(file);
XSSFSheet getSheet=workbook.getSheet("Sheet1");
List<SEntity> dataList= modelMapper.map(result(getSheet), new TypeToken<List<SEntity>>(){}.getType());
spreadSheetRepo.saveAll(dataList);
}
List<SEntity> result(XSSFSheet getSheet){
Iterator<Row> rowItr = getSheet.iterator();
boolean flag=false;
List<SEntity> list=new ArrayList<>();
while(rowItr.hasNext()) {
Row row = rowItr.next();
SEntity obj=new SEntity();
Iterator<Cell> cellItr = row.cellIterator();
if(flag==true) {
while(cellItr.hasNext()) {
Cell cell = cellItr.next();
int index = cell.getColumnIndex();
switch(index) {
case 0:
obj.setAddress(cell.toString());
break;
case 1:
obj.setName(cell.toString());
break;
}
}
list.add(obj);
}
flag=true;
}
return list;
}
}
Мой класс сущности:
@Entity
@Table(name="spreadsheet")
@Data
public class SEntity {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
int id;
@Column(name="name")
String name;
@Column(name="address")
String address;
}
Класс моего репо:
@Repository
public interface SpreadSheetRepo extends CrudRepository<SEntity,Integer> {
}
Код вышеработает нормально, как и ожидалось.но что если у меня 30 или более столбцов?определение индекса от 0 до 30 или на основе количества столбцов в регистре коммутатора мне не нравится.
есть ли другой способ реализовать сценарий?