验证表格中的数据并导入数据库

通过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)如何通过注解转化

未完待续.....

猜你喜欢

转载自blog.csdn.net/whz199511/article/details/80498266