问卷调查-实训心得

1、springboot提供API模板swagger
2、后端接口常用注解
@PathVariable:通过restful风格url来的接受参数
@RequestParam:接受多个参数,写法如何??一般不用写
@RequestBody:将前段传来的所有参数转码,可以接受对象
3、ajax是前后端跨域问题解决技术,jQuery是个前端框架,和vue是同级的,它里面有很多东西其中包括ajax,目前我用不到它,因为很多东西用不到,axios是对ajax的轻量级封装

                        

关于数据库

  •     我们这次使用的是Mongodb,它的给我最大的感受使可以无限拓展,在一个数据项中可以嵌套多种类型的数据,这就给了人们无限创新的能力,而且SpringBoot也对数据库操作封装了专门的类MongoTemplate,我可以使用该类在后端代码中实现想要完成的操作。
        

关于restful风格

  •     后端接受参数一般使用@RequestBody,他可以接受一个对象,也有时候直接在地址栏传递参数,通过@PathVariable来接受。
  •     过程:在地址栏中用{ }设置参数,在后端接口处用@PathVariable来接受。
@GetMapping("/surveyDelete/{surveyId}")
    public HttpResult surveyDelete(@PathVariable("surveyId")String surveyId){
        surveyService.surveyDelete(surveyId);
        return HttpResult.success();
    }

Mongodb的基本知识

  •     Query:使用Query来构建查询条件的对象
        用法:
Query query = Query.query();
  •     Criteria:添加查询条件
        用法:它可以放在query初始化中也可以单独使用
//方案一
Query query = Query.query(Criteria.where("_id").is("123"));
//方案二
Query query=new Query();
query.addCriteria(Criteria.where("_id").is("surveyId"));
query.addCriteria(Criteria.where("questionBeans.key").is("key"));  //注意这里,前面的参数说明了可以通过点 ".",来实现嵌套的层级定位
  •     Update:用于更新,因为Mongo数据库内部数据复杂,更新麻烦,所以特意设置了个Update类针对复杂的数据更新功能
        用法:该类中有多个方法,一般的更新用下面这种情况即可
@Override
    public void surveyDesc(String surveyId,String Describe){
        Query query=new Query();
        query.addCriteria(Criteria.where("_id").is(surveyId));
        Update update=Update.update("describe",Describe);
        mongoTemplate.updateFirst(query,update,SurveyBean.class);
    }
  • 增删改查涉及到的方法
    增:insert和save,添加相同数据时,前者报数据重复,后者是覆盖旧数据
    删:remove
    改:updateFirst和updateMulti,前者更新一个,后者多个;upsert更新数据,如果没找到数据则新增一个数据
    查:find和findOne,前者返回一个集合,后者返回一个对象

关于对数据项中数组的操作

1.按照对象数组下标更新对象中的数据
  •      过程:先根据surveyId查到对应数据项,在根据下标对数组中对应元素更新
  •      具体代码:
@Override
    public void questionUpdate(int index,String surveyId,QuestionBean questionBean){
        Query query=new Query();
        query.addCriteria(Criteria.where("_id").is(surveyId));
        Update update= new Update().set("questionBeans."+index+".key",questionBean.getKey());
        update.set("questionBeans."+index+".question",questionBean.getQuestion());
        update.set("questionBeans."+index+".option",questionBean.getOption());
        System.out.println();
        mongoTemplate.updateFirst(query,update,SurveyBean.class);

    }

    这块代码中使用了Update类中的set方法,这个方法可以根据下标定位到具体的要更新的数据。就像在对象数组中由下标来修改对象的数值。

2.在对象数组中添加一个对象
  •     过程:听到添加,一开始想到的是insert那块的方法,但是insert添加的是数据库中的一行数据(记录),而不是记录中某项数据项(对象数组)。它其实要靠upsert和update来实现
  •     代码:
@Override
    public void questionAdd(QuestionBean questionBean, String surveyId){
        Query query = new Query();
        query.addCriteria(Criteria.where("_id").is(surveyId));
        Update update=new Update();
        //直接在questionBeans后面继续添加或者
        update.push("questionBeans",questionBean);
        //mongodb更新 
        mongoTemplate.upsert(query,update,"survey");
    }

    这块代码使用了Update方法中push,设置添加的值类型是一个对象,并且把该具体要添加的对象放到push方法的第二个参数。用upsert方法执行添加。

3.删除对象数组中的某个对象
  •     过程:根据问卷id找到该问卷,再根据问题的key在对象数组中找到要删除的对象
  •     代码:
@Override
    public void questionDelete(String key,String surveyId){
        Query query=new Query();
        query.addCriteria(Criteria.where("_id").is(surveyId));
        query.addCriteria(Criteria.where("questionBeans.key").is(key));
        Update update=new Update();
        Document document=new Document();
        document.put("key",key);
        update.pull("questionBeans",document);
        mongoTemplate.updateMulti(query,update,SurveyBean.class);

    }

    这块代码使用了update类中的pull方法,第一个参数是定位数据,第二个数据是删除数据的类型,文档类型(document)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值