springboot excel上傳並且存入oracle資料庫
上一篇寫了springboot 下載excel 模板,目前有個需求是把 下載的excle 填上資料 上傳,並且儲存的資料庫,這邊只針對後臺操作
@Transactional 事務標識
@RequestMapping(value = "/upload")
@ResponseBody
public RetData<String> upload(HttpServletRequest request) throws Exception {
RetData<String> retData = new RetData<String>();
//獲取multipartRequest
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
// 獲得檔案
MultipartFile multipartFile = multipartRequest.getFile("file");// 與前端設定的fileDataName屬性值一致
Workbook book = null;
List<OutDataGr> demoList = new ArrayList<OutDataGr>();
// 判斷是xls還是xlsx
try {
book = new HSSFWorkbook(new POIFSFileSystem(multipartFile.getInputStream()));
} catch (Exception ex) {
book = new XSSFWorkbook(multipartFile.getInputStream());
};
int numberOfSheets = book.getNumberOfSheets();
for (int i = 0; i < numberOfSheets; i++) {
Sheet sheet = book.getSheetAt(i);
// 獲取sheet中有多少行,遍歷每一行
int physicalNumberOfRows = sheet.getPhysicalNumberOfRows();
for (int j = 0; j < physicalNumberOfRows; j++) {
if (j == 0) {
continue;// 標題行
}
OutDataGr gr = new OutDataGr();
Row row = sheet.getRow(j);// 獲得當前行資料
gr.setName(row.getCell(0).getStringCellValue()); // 姓名
if (row.getCell(1) != null) {
row.getCell(1).setCellType(Cell.CELL_TYPE_STRING);//設定cell裡面的資料型別
gr.setZjhm(row.getCell(1).getStringCellValue());// 身份證號
}
if (row.getCell(2) != null) {
row.getCell(2).setCellType(Cell.CELL_TYPE_STRING);
String sex = row.getCell(2).getStringCellValue();
if ("男".equals(sex)) {
gr.setSex("1"); // 性別:男
} else {
gr.setSex("2");// 性別:女
}
}
if (row.getCell(3) != null) {
row.getCell(3).setCellType(Cell.CELL_TYPE_STRING);
gr.setAge(row.getCell(3).getStringCellValue());// 年齡
}
gr.setId('1');
demoList.add(gr);
}
}
// 批量儲存資料
outDataGrBPO.batchSave(demoList);
retData.setRetBody("新增成功");
return retData;
}
最後吐槽下 ,因為樓主用的mybatis要批量儲存到oracle 裡面,網上好多都是mysql的。。沒注意,試了好多,
結果發現數據庫不一樣,直接也貼出來吧
<!-- oracle批量儲存使用者,並返回每個使用者插入的ID -->
<insert id="batchSave" parameterType="java.util.List">
insert into GAS_OUT_DATA_GR
(
ID,NAME,SEX,AGE,ZJHM,SCNY,SCR,TYPE,RECORD_ID
)
<foreach collection="list" open="(" close=")" index="" item="item" separator="union all" >
select
#{item.id},#{item.name},#{item.sex},#{item.age},#{item.zjhm},
#{item.scny},#{item.scr},#{item.type},#{item.recordId}
from dual
</foreach>
</insert>