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)