【Java EE 学习第71天】【数据采集系统第三天】【分析答案实体】【删除问题】【删除页面】【删除调查】【清除调查】【打开/关闭调查】

一、分析答案实体

  分析答案实体主要涉及到的还是设计上的问题,技术点几乎是没有的。首先需要确定一下答案的格式才能最终确定答案实体中需要有哪些属性。

  答案格式的设计是十分重要的,现设计格式如下:

  在表单中需要提供的信息有name值和value值,name值实际上只是用于回显和保存答案,对于保存答案来说只需要一个问题id就可以了,但是实际上对于矩阵式单选按钮来说,name的值就显得比较复杂了,显得比较复杂的原因是为了回显方便。但是在答案实体中需要保存的只有一个问题id而已。

  类型1-4问题的答案格式(单选、多选、带有其它项):

    如果是radio类型的或者checkbox类型的表单:name=‘q‘+qid,value=问题的索引值,比如问题类型1,那么答案就是q1,这里不考虑查看已经做完的答案问题,假设一次性的提交。

    如果带有"其它"题目,那么首先使用chekbox类型的一个表单来确定是否有其它类型的选项,该值是boolean类型的,name=‘q‘+qid,但是value值是固定的"other"

    如果带有其他类型的题目,那么还需要判断其它类型的题目是哪一种类型的,这里假设其他类型的题目有两种类型,一种是文本框类型,一种是下拉列表类型的。

    两种其他类型的答案name=‘q’+qid+‘other‘,对于恰年一种文本框类型的答案来说,问题的答案保存只是一个字符串,对于后者来说也是一个问题的索引值。 

  类型5问题的答案(下拉列表):name=‘q‘+qid,value=问题的索引值;

  类型6问题的答案(文本框):name=‘q‘+qid,value=填写的字符串;

  类型7问题的答案(矩阵式单选按钮):name=‘q‘+qid+‘_‘+行坐标+‘_‘+列坐标,value=行坐标+‘_‘+纵坐标。

  类型8问题的答案(矩阵式复选框按钮):name=‘q‘+qid,value=‘行坐标‘+‘_‘+纵坐标。

  类型9问题的答案(矩阵式下拉列表):name=‘q‘+qid,value=行坐标+‘_‘+纵坐标+‘_‘+下拉列表框的索引值。

  总结一下,答案的实体需要保存的答案主要有两个一个是答案的索引值字符串answerIndexs,一个是带有其它答案的otherAnswer用来保存其它答案。再加上一个答题时间answerTime,这里需要注意一下,是否需要关联到question对象的问题。首先需要根据Question获取该question的所有答案吗?一定会有这种需求,但是如果使用关联关系得到所有答案的方法是十分愚蠢的,因为参与调查的人非常多,很可能有几万或者几十万,如果将Question对象随随便的的就传递到前端页面,大量的数据(答案)就会保存到Session,服务器很快就会瘫痪所以Quesiton一定不能关联到Answers对象。但是这里还需要Answer对象和Question对象有联系,否则单纯的保存答案是没有任何意义的。所以我们给Answer对象添加一个questionId属性用来标识是哪道题目。另外为了查询方便,我们使用一个冗余字段surveyId来标识是哪个调查。

  

二、删除问题、删除页面、删除调查

以上三个删除无论删除哪一个,首先一定能够确定的是一定要删除掉对应的所有答案。

删除问题:先删除答案,再删除问题

1 public void deleteQuestion(Question question) {
2         String hql="delete from Answer a where a.questionId=?";
3         questionDao.batchEntityByHql(hql, question.getQuestionId());
4
5         hql="delete from Question q where q.questionId=?";
6         this.questionDao.batchEntityByHql(hql, question.getQuestionId());
7     }

删除页面:先删除答案,再删除问题,再删除页面

public void deletePage(Page page) {
        page=pageDao.getEntityById(page.getPageId());
        Set<Question> questions=page.getQuestions();
        //首先删除掉页面上的所有问题和答案
        String hql="delete from Answer a where a.questionId=?";
        for(Question question:questions){
            answerDao.batchEntityByHql(hql, question.getQuestionId());
        }
        //删除掉所有问题
        hql="delete from Question q where page.pageId=?";
        questionDao.batchEntityByHql(hql, page.getPageId());
        //删除掉当前页面
        hql="delete from Page p where p.pageId=?";
        pageDao.batchEntityByHql(hql, page.getPageId());
    }

删除调查:先删除答案,再删除问题,再删除页面,最后删除调查。

 1 public void deleteSurvey(Survey survey) {
 2         survey=this.surveyDao.getEntityById(survey.getSurveyId());
 3         String hql;
 4         Set<Page>pages=survey.getPages();
 5         for(Page page:pages){
 6             Set<Question>questions=page.getQuestions();
 7             //首先删除掉当前调查中的所有页面中的所有问题的答案
 8             for(Question question:questions){
 9                 hql="delete from Answer a where a.questionId=?";
10                 answerDao.batchEntityByHql(hql, question.getQuestionId());
11             }
12             //然后删除掉当前调查中的所有页面中的所有问题
13             hql="delete from Question where page.pageId=?";
14             questionDao.batchEntityByHql(hql, page.getPageId());
15         }
16         //然后删除掉当前调查中的所有页面
17         hql="delete from Page where survey.surveyId=?";
18         pageDao.batchEntityByHql(hql, survey.getSurveyId());
19         //最后删除掉Survey对象本身
20         hql="delete from Survey s where s.surveyId=?";
21         surveyDao.batchEntityByHql(hql, survey.getSurveyId());
22     }

三、清除调查,即删除掉自己参与的调查,略。

四、打开、关闭调查

  该功能能够影响参与调查的时候能够显示出哪些调查。这需要给Survey对象添加一个新的属性closed,如果该属性的值是true,表示该调查的状态是已经关闭的,在参与调查的列表中就不能够被显示出来,如果是false表示还没有关闭,在列表中就能够显示出来。

  比较简单,略。

时间: 2024-09-30 04:22:43

【Java EE 学习第71天】【数据采集系统第三天】【分析答案实体】【删除问题】【删除页面】【删除调查】【清除调查】【打开/关闭调查】的相关文章

Java EE学习--Quartz基本用法

新浪博客完全不适合写技术类文章.本来是想找一个技术性的博客发发自己最近学的东西,发现博客园起源于咱江苏,一个非常质朴的网站,行,咱要养成好习惯,以后没事多总结总结经验吧.很多时候都在网上搜索别人的总结,我自己也总结些东西,或许多多少少能帮得上别人. 首先提到的是Quartz,一个开源的定期执行计划任务的框架.其实我内心好奇这个框架很久了,像那些能定时修改数据库数据,定时分配任务的功能一直觉得很神奇.心动不如行动,今天我就小小的学习了一下用法,力求言简意赅,大家都懂的我就不说了. 第一步:下载Qu

Java EE 学习(7):IDEA + maven + spring 搭建 web(3)- 配置数据库

参考: https://my.oschina.net/gaussik/blog/513444 注:在阅读本文前,请先阅读: Java EE 学习(5):IDEA + maven + spring 搭建 web(1) Java EE 学习(6):IDEA + maven + spring 搭建 web(2) 5 数据库配置 下面,就要通过一个简单的例子,来介绍 SpringMVC 如何集成 Spring Data JPA(由 Hibernate JPA 提供),来进行强大的数据库访问,并通过本章节

JAVA EE 学习笔记[V1 jsp编程]

在三月初学校开设了javaee的课程,也就此展开了对javaee基础的学习.然后老师也对这次的课程有一定要求.前面的基础就为最终的作业做准备啦~ 在上学期我们学习了java相关知识,也对java se 的安装使用有了一定的认知,而java ee则是构建于java se 平台之上的一套多层的,可扩展的的网络应用. 学习java ee我们首先进行环境的搭建.无非就是使用 tomcat进行服务器的搭建和jdk环境变量配置.而IDE这方面我们选择myeclipse 2016 CI(这个编译器自带tomc

Java EE 学习(8):IDEA + maven + spring 搭建 web(4)- 用户管理

转载:Gaussic(一个致力于AI研究却不得不兼顾项目的研究生) 注:在阅读本文前,请先阅读: Java EE 学习(5):IDEA + maven + spring 搭建 web(1) ava EE 学习(6):IDEA + maven + spring 搭建 web(2)- 配置 Spring Java EE 学习(7):IDEA + maven + spring 搭建 web(3)- 配置数据库 记录: 通过对用户表的管理,更加深入地讲解SpringMVC的操作. 6 用户管理 既然我们

Java EE 学习(9):IDEA + maven + spring 搭建 web(5)- 博客文章管理

转载:Gaussic(一个致力于AI研究却不得不兼顾项目的研究生) . 注:在阅读本文前,请先阅读: Java EE 学习(5):IDEA + maven + spring 搭建 web(1) Java EE 学习(6):IDEA + maven + spring 搭建 web(2)- 配置 Spring Java EE 学习(7):IDEA + maven + spring 搭建 web(3)- 配置数据库 Java EE 学习(8):IDEA + maven + spring 搭建 web(

【Java EE 学习第16天】【dbcp数据库连接池】【c3p0数据库连接池】

零.回顾之前使用的动态代理的方式实现的数据库连接池: 代码: 1 package day16.utils; 2 3 import java.io.IOException; 4 import java.lang.reflect.InvocationHandler; 5 import java.lang.reflect.Method; 6 import java.lang.reflect.Proxy; 7 import java.sql.Connection; 8 import java.sql.D

Java EE学习之旅1——HeadFirstJavaEE

因为找到的实习是用Java开发的公司,所以来学习一下Java EE的知识. 首先找来了书<轻量级Java EE企业应用实战>. 啊不得不说学了Java之后直接看这个还是完全不行呢,好多名词看都没有看过啊哈哈. 首先来看看都些啥看不懂的词... 1.JSP.Servlet和JavaBean JSP和Servlet都是用在表现层的东西,而实质上JSP编译成Servlet才运行. 但Servlet开发成本太大,所以用JSP. JavaBean用来通信交换表现层和底层数据. 2.MVC和Struts

Java EE学习——Quartz的Cron表达式

经历过低谷后,还是要好好学习,越失落会越来越落后. 今天写一下Cron表达式的用法,虽然是之前自己写的,也过了挺长一段时间,这次就拿出来作为回顾吧. Cron表达式是Quartz的精髓(个人觉得),比如我们想设定淘宝“秒杀”的那一秒时间,完全可以用下面的方法设置执行时间. Calendar cal = Calendar.getInstance(); //设置将要发生的时间... cal.set(Calendar.DATE, xxx); //.......常规的生成scheduler和job //

Java EE学习之旅3——MySQL

只是要是个正经项目,软件就需要使用到数据库,而我连基本的数据库语句都不会用, 所以还是在学习JavaEE之前学习一下MySQL的基本使用. 安装和配置 这个不多说,基本上按照默认的安装msi即可,最重要的是要记住配置时候设置的密码. 基本语句 一个基本原则是MySQL的特有语句在命令行里面不用加分号,操作数据库的通用语句要用分号. 下面是基本语句: create database DatabaseName 创建一个数据库 use DatabaseName 切换当前数据库 create table