通过EasyPOI导入表格并且已经把表格里的数据直接转化为list数据流,可以说,接下来的操作和添加按钮的业务差不多了;也就是说,你添加业务是怎么把数据导入数据库的那接下来就怎么导入(我没见过学编程的CRUD不会的),下面写的是自己项目所需要的业务逻辑,记下来忘记看看。
/* * 批量导入 */ @RequestMapping(value = "/import" , method = RequestMethod.POST) @ResponseBody public Json importExcel(@RequestParam(value="file" , required=true) MultipartFile file) { //json对象,作为返回值返回给页面来打印信息给用户看 Json json = new Json(); ImportParams params = new ImportParams(); params.setTitleRows(1); params.setHeadRows(1); List<StudentDto> list = null; try { list = ExcelImportUtil.importExcel(file.getInputStream(), StudentDto.class, params); studentService.batchSave(list); json.setMsg("操作成功"); json.setSuccess(true); } catch (Exception e) { logger.info("批量导入失败"+e.getMessage()); json.setMsg("操作失败"); json.setSuccess(false); } return json; }
接下来就是把list数据流里的数据依次按属性取出来再保存到数据库;
我的页面上表格里的数据是从数据库中3个表(DfStudent\DfStudentParent\DfstudentSickness)里查出来组合显示到页面上的,如何把总的数据流里的数据存到不同的表里(1),而且每个类里的有些属性是通过注解转换来的,如血型有四种类型,每种类型通过注解转换为数值存到数据库(2),所以我还得把表格里的血型值转换为数值保存到数据库,而且有一个表(DfStudentSickness)里的属性不是必填项,需要给个判断;
/** * * 批量保存. */ @Override public void batchSave(List<StudentDto> list) { //设定默认长度,防止给的内存过多造成浪费 List<DfStudent> studentlist = Lists.newArrayListWithExpectedSize(list.size()); List<DfStudentParent> parentlist = Lists.newArrayListWithExpectedSize(list.size()); List<DfStudentSickness> sicknesslist = Lists.newArrayListWithExpectedSize(list.size()); //在保存之前把list数据流里的中文字典转换为数字 DataNameToValue.nameToValueList(list, iDictCdService.getList()); //处理学生数据 dealStudentData(list,studentlist,parentlist,sicknesslist); //把 数据保存到数据库中 for(int i = 0; i < studentlist.size(); i++) { save(studentlist.get(i)); parentService.save(parentlist.get(i)); //病史属于可填可不填数据,所以进行判空 if(null!=sicknesslist.get(i)) { //保存数据 sickNessService.save(sicknesslist.get(i)); } } }
(1)单独写一个函数(dealStudentData(list,studentlist,parentlist,sicknesslist);)来获取数据,三个类设三个对象,用来接收相应的属性,通过for循环和BeanUtils把相应的数据拷贝到对象里
/** * * dealStudentData:处理学生数据. * @author hzwu4 * @param list 前端传递的学生数据 * @param studentlist 需要保存的学生数据 * @param parentlist * @param sicknesslist */ private void dealStudentData(List<StudentDto> list, List<DfStudent> studentlist ,List<DfStudentParent> parentlist,List<DfStudentSickness> sicknesslist) { DfStudent stu = new DfStudent(); DfStudentParent parent = new DfStudentParent(); DfStudentSickness sickNess = new DfStudentSickness(); for (int i = 0; i < list.size(); i++) { //初始化拷贝学生默认数据 list.get(i).setId(PbUtils.getUUID()); list.get(i).setIsInterim("1"); list.get(i).setAuditNode(1);// 班级节点 list.get(i).setAuditStateCode("0"); list.get(i).setCreateTime(new Date()); //拷贝从前台传来的list数据流中的所需要得数据放入stu中 BeanUtils.copyProperties(list.get(i),stu); //最后把stu添加到数据库中 studentlist.add(stu); //拷贝从前台传来的list数据流中的所需要的数据放入parent中 BeanUtils.copyProperties(list.get(i), parent); parent.setId(PbUtils.getUUID()); parent.setDfStudent(stu); parentlist.add(parent); //拷贝化病例默认数据 BeanUtils.copyProperties(list.get(i), sickNess); //判断有没有填,填了就添加,没填就不添加 if( StringUtils.isBlank(sickNess.getSickHistory())&& StringUtils.isBlank(sickNess.getBlood())&& StringUtils.isBlank(sickNess.getIsQuicksick())&& StringUtils.isBlank(sickNess.getAllergyHistory())&& StringUtils.isBlank(sickNess.getIsHered())&& StringUtils.isBlank(sickNess.getOtherHistory())&& StringUtils.isBlank(sickNess.getRemarks())) { sicknesslist.add(null); }else { sickNess.setId(PbUtils.getUUID()); sickNess.setDfStudent(stu); sicknesslist.add(sickNess); } } }(2)如何通过注解转化
未完待续.....