微服务项目->在线oj系统(Java-Spring)--增删改

后端代码

增添

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);
    }
相关推荐
Patrick在香港9 分钟前
Python Docker镜像从1.2GB到89MB:多阶段构建的完整优化实录
java·python·docker·信息可视化·容器·数据分析·ai编程
上海安当技术20 分钟前
敏感数据怎么防拖库?信封加密(DEK+KEK 二层密钥)架构设计与 Java 实战
java·开发语言·python
我是唐青枫29 分钟前
Java JCommander 实战详解:用注解解析命令行参数
java·开发语言
大鹏说大话37 分钟前
C++ 内存布局详解:类、虚函数、虚表底层原理
java·开发语言
键盘会跳舞1 小时前
C++:容器适配器 queue 的源码级拆解
开发语言·c++·queue
还是鼠鼠1 小时前
Spring AI连接DeepSeek与通义千问:application.yaml配置详解
java·通义千问·spring ai·deepseek
计算机小白一个2 小时前
蓝桥杯 Java B 组之哈希表应用(两数之和、重复元素判断)
java·数据结构·算法·蓝桥杯
Loge编程生活2 小时前
打卡信奥刷题(3449)用C++实现信奥题 P10429 [蓝桥杯 2024 省 B] 拔河
开发语言·数据结构·c++·算法·青少年编程
在世修行3 小时前
从零打造 C# 工业视觉检测系统(八):Modbus RTU 协议解析与 PLC 剔除控制实战
开发语言·c#
sunburn-3 小时前
Java 队列全面详解:从入门到面试实战
java·开发语言·汇编·ide·idea