后端代码
增添

toR

QuestionAddDTO
了解前端添加一个问题需要我们传入什么数据

java
package com.bite.system.model.question.DTO;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class QuestionAddDTO {
private String title;
private Integer difficulty;
private Long timeLimit;
private Long spaceLimit;
private String content;
private String questionCase;
private String defaultCode;
private String mainFuc;
}
Controller
@PostMapping("/add")
public R<Void> add(@RequestBody QuestionAddDTO questionAddDTO){
return toR(questionService.add(questionAddDTO)) ;
}
Service
首先通过mapper进行查询,查询我们的数据库里面是否存在相同标题的题目,如果有,抛出异常,然后异常统一捕获,返回给前端报错

如果所增加题目并不在数据库里面,则新创建一个Question对象,然后将我们前端传来参数(DTO)复制给question对象,然后让数据库进行插入操作
java
@Override
public int add(QuestionAddDTO questionAddDTO) {
List<Question> list=questionMapper.selectList(new LambdaQueryWrapper<Question>().eq(Question::getTitle,questionAddDTO.getTitle()));
if(CollectionUtil.isNotEmpty(list)){
throw new ServiceException(ResultCode.FAILED_ALREADY_EXISTS);
}
Question question = new Question();
BeanUtil.copyProperties(questionAddDTO, question);
int insert = questionMapper.insert(question);
return insert;
}
如果插入成功,新增数据将会出现在我们列表的第一个,否则传给前端错误原因
修改

java
@Data
public class QuestionEditDTO extends QuestionAddDTO{
private Long questionId;
}
当我们点开修改页面的时候,会根据id自动获取到相关的详细内容
java
@GetMapping("/detail")
public R<QuestionDetailVO> detail(Long questionId) {
return R.ok(questionService.detail(questionId));
}
首先通过id进行查询,看是否存在这本书,如果不存在抛出异常
如果数据库中有该题,则从数据库里面查询到数据,然后创建一个返回给前端的VO
java
@Data
public class QuestionDetailVO {
private Long questionId;
private String title;
private Integer difficulty;
private Long timeLimit;
private Long spaceLimit;
private String content;
private String questionCase;
private String defaultCode;
private String mainFuc;
}
然后将值复制给这个VO类,返回VO
java
@Override
public QuestionDetailVO detail(Long questionId) {
Question question = questionMapper.selectById(questionId);
if (question == null) {
throw new ServiceException(ResultCode.FAILED_NOT_EXISTS);
}
QuestionDetailVO questionDetailVO = new QuestionDetailVO();
BeanUtil.copyProperties(question, questionDetailVO);
return questionDetailVO;
}

然后继续进行修改操作
java
// /question/edit
@PutMapping("/edit")
public R<Void> edit(@RequestBody QuestionEditDTO questionEditDTO) {
return toR(questionService.edit(questionEditDTO));
}
通过前端的输入框获得数据,然后点击按键去进行调用后端函数,将参数传入赋值
java
@Override
public int edit(QuestionEditDTO questionEditDTO) {
Question oldQuestion = questionMapper.selectById(questionEditDTO.getQuestionId());
if (oldQuestion == null) {
throw new ServiceException(ResultCode.FAILED_NOT_EXISTS);
}
oldQuestion.setTitle(questionEditDTO.getTitle());
oldQuestion.setDifficulty(questionEditDTO.getDifficulty());
oldQuestion.setTimeLimit(questionEditDTO.getTimeLimit());
oldQuestion.setSpaceLimit(questionEditDTO.getSpaceLimit());
oldQuestion.setContent(questionEditDTO.getContent());
oldQuestion.setQuestionCase(questionEditDTO.getQuestionCase());
oldQuestion.setDefaultCode(questionEditDTO.getDefaultCode());
oldQuestion.setMainFuc(questionEditDTO.getMainFuc());
return questionMapper.updateById(oldQuestion);
}
通过id去搜索搜索之前存入的数据,如果不存在抛出异常,
然后对之前的内容进行赋值,之后使用Mapper进行修改

删除

有了前面俩个的学习,我们接下来就会轻松许多,我们这里后端只做第三步
直接通过id去数据库进行删除操作
java
// /question/delete
@DeleteMapping("/delete")
public R<Void> delete(Long questionId) {
return toR(questionService.delete(questionId));
}
java
@Override
public int delete(Long questionId) {
Question question = questionMapper.selectById(questionId);
if (question == null) {
throw new ServiceException(ResultCode.FAILED_NOT_EXISTS);
}
return questionMapper.deleteById(questionId);
}