Birds_Cerebrum 2018-01-30 02:16 采纳率: 28.6%
浏览 1299
已结题

spring+myBatis数据不入库问题,求大神解答。

昨天做项目的时候遇到的问题,查询删除都是好的,保存死活不入库,以下是代码部分:

 /**
     * 试题模版导入
     * 
     * @param session
     * @param response
     * @param request
     * @throws Exception
     */
    @RequestMapping(value = "/templateImport", method = RequestMethod.POST)
    @ResponseBody
    public String templateImport(@RequestParam(value = "file", required = false) MultipartFile file, HttpSession session,
            HttpServletResponse response, HttpServletRequest request, ModelMap modelMap) {
        List<Map<Question, List<String>>> questionAndOptionsList = new ArrayList<Map<Question, List<String>>>();// 定义试题和答案的map集合对象集
        List<Row> rowList = new ArrayList<Row>();// 定义行对象
        String libraryId = request.getParameter("libraryId");
        if (StringUtils.isEmpty(libraryId)) {
            modelMap.put("message", "未选择题库");
            RequestResponseUtil.putResponseStr(session, response, request, modelMap, StringConstant.FALSE);
            return null;
        }
        try {
            rowList = ExcelUtil.getRows(file, 1);
        } catch (Exception e) {
            modelMap.put("message", "解析模版出错");
            RequestResponseUtil.putResponseStr(session, response, request, modelMap, StringConstant.FALSE);
            return null;
        }
        int dateNum = rowList.size();// 定义数据总条数
        int addNum = 0;// 定义新增数据条数
        int updateNum = 0;// 定义修改数据条数
        for (int i = 0; i < rowList.size(); i++) {
            Row row = rowList.get(i);
            Question question = new Question();// 定义试题对象
            List<String> questionOptionList = new ArrayList<String>();// 定义接收所有解析到的试题选项
            int cellNum = row.getLastCellNum();// 获取总列数
            String questionTypeId = null; // 定义转换之后的试题类型
            // 获取所有试题列的值
            String content = ExcelUtil.getStringCellValue(row.getCell(0));// 获取试题内容
            String questionTypeName = ExcelUtil.getStringCellValue(row.getCell(1));// 获取试题类型(拿到的是中文,需要自己转换)
            String answer = ExcelUtil.getStringCellValue(row.getCell(2));// 获取答案
            String analysis = ExcelUtil.getStringCellValue(row.getCell(3));// 获取试题解析
            /*
             * 试题信息非空校验
             */
            if (StringUtils.isEmpty(content)) {
                modelMap.put("message", "导入文件中第" + (i + 2) + "行的试题内容为空");
                RequestResponseUtil.putResponseStr(session, response, request, modelMap, StringConstant.FALSE);
                return null;
            }
            if (StringUtils.isEmpty(questionTypeName)) {
                modelMap.put("message", "导入文件中第" + (i + 2) + "行的试题类型为空");
                RequestResponseUtil.putResponseStr(session, response, request, modelMap, StringConstant.FALSE);
                return null;
            } else {
                // 解析试题类型为编码
                switch (questionTypeName) {
                case "单选题":
                    questionTypeId = Const.QUESTION_TYPE_ID_SINGLE;
                    break;
                case "多选题":
                    questionTypeId = Const.QUESTION_TYPE_ID_MULTIPLE;
                    break;
                case "判断题":
                    questionTypeId = Const.QUESTION_TYPE_ID_JUDGE;
                    break;
                default:
                    break;
                }
            }
            if (StringUtils.isEmpty(answer)) {
                modelMap.put("message", "导入文件中第" + (i + 2) + "行的答案为空");
                RequestResponseUtil.putResponseStr(session, response, request, modelMap, StringConstant.FALSE);
                return null;
            }
            /*
             * 试题信息长度校验
             */
            if (content.length() > 1000) {
                modelMap.put("message", "导入文件中第" + (i + 2) + "行的试题内容长度超出范围");
                RequestResponseUtil.putResponseStr(session, response, request, modelMap, StringConstant.FALSE);
                return null;
            }
            if (answer.length() > 200) {
                modelMap.put("message", "导入文件中第" + (i + 2) + "行的答案长度超出范围");
                RequestResponseUtil.putResponseStr(session, response, request, modelMap, StringConstant.FALSE);
                return null;
            }
            if (analysis.length() > 500) {
                modelMap.put("message", "导入文件中第" + (i + 2) + "行的试题解析长度超出范围");
                RequestResponseUtil.putResponseStr(session, response, request, modelMap, StringConstant.FALSE);
                return null;
            }

            /*
             * 校验通过之后设置question对象
             */
            question.setContent(content);// 设置内容
            question.setQuestionTypeId(questionTypeId);// 设置类型
            question.setAnswer(answer);// 设置答案
            question.setLibraryId(libraryId);// 设置题库
            question.setAnalysis(analysis);// 设置解析
            question.setDelFlag("0");// 设置删除标识(1、为删除0、为未删除)

            /*
             * 开始解析试题答案信息
             */
            for (int j = 4; j < cellNum; j++) {// 定义从第5列开始解析答案信息,第5列之前都时试题信息
                String questionOption = ExcelUtil.getStringCellValue(row.getCell(j));// 获取试题答案选项
                if (!StringUtils.isEmpty(questionOption)) {// 判断试题选项是否为空,如果为空则不存储该选项,也不中断解析之后的选项列
                    questionOptionList.add(questionOption);
                }
            }
            Map<Question, List<String>> map = new HashMap<Question, List<String>>();
            map.put(question, questionOptionList);
            questionAndOptionsList.add(map);
        }
        for (Map<Question, List<String>> questionAndOptions : questionAndOptionsList) {
            Set set = questionAndOptions.keySet();
            Iterator iterator = set.iterator();
            while (iterator.hasNext()) {
                Question keyQuestion = (Question) iterator.next();
                **questionService.save(keyQuestion);// 保存试题信息**
                List<String> questionOptionsList = questionAndOptions.get(keyQuestion);// 获取该试题所有的选项
                for (int j = 0; j < questionOptionsList.size() && j < 26; j++) {
                    String content = questionOptionsList.get(j);
                    char letterCapital = (char) (j + 65);// 将数字转换成对应的字母
                    QuestionOption questionOption = new QuestionOption();// 定义试题对象
                    questionOption.setContent(content);// 设置选项内容
                    questionOption.setQuestionId(keyQuestion.getId());// 设置试题ID
                    questionOption.setName(String.valueOf(letterCapital));// 设置选项编号(A、B、C...)
                    questionOption.setSortNum(String.valueOf(j));// 设置排序号
                    questionOption.setDelFlag("0");// 设置删除标识(1、为删除0、为未删除)
                    **optionService.save(questionOption);// 保存试题对象**
                }
            }
        }
        modelMap.put("message", "新增数据:" + addNum + "条,修改数据:" + updateNum + "条,失败:" + (dateNum - addNum - updateNum) + "条");
        RequestResponseUtil.putResponseStr(session, response, request, modelMap, StringConstant.TRUE);
        return null;
    }

跟此方法同类下的保存方法是可以运行的,并且数据也能入库,上述方法没有出现任何错误,并且执行save之后对象ID也会自动生成,但就时不入库。

  • 写回答

5条回答 默认 最新

  • SearchLGP 2018-01-30 05:44
    关注

    数据库表中主键设置auto-increment了吗?spring 的事务有没有走完,而方法调用就结束了。故没有保存到库里,其实是回滚了!

    评论

报告相同问题?

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记