читать данные из Excel и хранить в БД с помощью весенней загрузки jpa - PullRequest
0 голосов
/ 02 июля 2019

чтение данных из 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 или на основе количества столбцов в регистре коммутатора мне не нравится.

есть ли другой способ реализовать сценарий?

...