当前位置: 首页 > article >正文

“添加”业务功能开发

添加接口最终向数据库提交数据,根据界面原型结合表结构进行设计,先分析表中每个字段的数据来源,再分析接口传入参数内容,通常添加接口没有特殊要求可根据状态码判断是否添加成功。

1. Controller

Controller 层负责处理前端发送的请求,接收参数,并调用 Service 层的方法。

步骤:

  • 定义一个处理添加请求的接口方法。通常使用 @PostMapping 注解来标识它是一个 POST 请求。
  • 在方法参数中接收前端传递的 DTO 对象,使用 @RequestBody 注解来将 JSON 数据自动转换为 Java 对象。

示例:

@RestController
@RequestMapping("/api/v1/items")
public class ItemController {

    @Autowired
    private ItemService itemService;

    @PostMapping("/batch")
    @ApiOperation("*服务批量新增")
    public void add(@RequestBody List<ItemDTO > itemDTOList) {
        itemService.batchAdd(itemDTOList);
    }
}

2. Service

Service 层负责业务逻辑的处理。这里通常会对输入的数据进行校验,然后调用 Mapper 层的方法来操作数据库。

步骤:

  • 编写一个添加数据的方法。
  • 在方法中首先对 DTO 对象进行校验,比如检查必填字段是否为空,数据格式是否正确等。
  • 校验通过后,将 DTO 转换为对应的实体对象。
  • 调用 Mapper 层的方法,将数据插入数据库中。

示例:

@Service
public class ItemService {

    @Override
    @Transactional
    public void batchAdd(List<itemDTOList> itemDTOList) {
        
            //1.校验服务项是否为启用状态,不是启用状态不能新增
            

            //2.校验是否重复新增
            

            //3.新增服务           
            baseMapper.insert(serve);
        }
    }
}

2.1 数据校验

一般校验两部分:(1)参数的数据的正确性,或者是否符合要求。

                             (2)校验是否重复新增。

2.2 异常处理

如果数据校验为不符合要求或重复新增,要抛出异常。

对于增、删、改类的接口通常会先进行入参校验,校验失败抛出异常,由异常处理器统一对异常进行处理。

异常处理怎么实现的:

mapper异常及service异常都抛给controller,controller方法的异常由异常处理器统一对异常进行处理。

我们抛出的异常是自定义异常类型,自定义的异常类型都继承了CommonException类型,在异常处理器中对此类型的异常进行处理。

通过@RestControllerAdvice注解加@ExceptionHandler注解实现,具体的原理是当controller抛出异常由DispatcherServlet统一拦截处理,再根据异常类型找到@ExceptionHandler标识方法去执行该方法进行异常处理。

2.3 事务管理

Service 层进行数据校验后,还需要考虑事务管理。可以使用 @Transactional 注解来保证整个添加操作的原子性,避免数据的不一致。

@Transactional 是 Java 中用于声明式事务管理的注解,通常用于 Spring 框架中。它的主要作用是在方法执行时,将所有涉及的数据库操作纳入到一个事务中。如果事务中的任何一步操作失败(例如抛出异常),事务将回滚,这意味着所有已经执行的数据库操作都将被撤销,以保证数据的一致性。

2.3.1 事务的概念

  • 事务是一个逻辑操作单元,包含一组数据库操作(例如插入、更新、删除等)。这些操作要么全部成功,要么全部失败。

  • 事务的四个基本特性通常被称为 ACID(原子性、一致性、隔离性、持久性)。

2.3.2 @Transactional 的作用

  • 原子性:确保方法内的所有操作要么全部执行成功,要么在出现异常时全部回滚。

  • 一致性:确保方法执行前后,数据库中的数据保持一致。

  • 隔离性:不同事务之间相互隔离,避免并发问题。

  • 持久性:事务成功提交后,数据持久存储在数据库中。

2.3.3 常见使用场景

  • Service 层 方法上使用 @Transactional,确保该方法中所有的数据库操作在一个事务中执行。

  • 对于需要多步操作且每步操作依赖前一步结果的情况,非常适合使用事务管理。

3. Mapper

Mapper 层负责与数据库的直接交互。通过 MyBatisMyBatis-Plus 或者其他持久层框架,将数据插入到数据库表中。

5. 总结

5.1 controller

根据界面原型结合表结构进行设计,先分析表中每个字段的数据来源,再分析接口传入参数内容,然后定义controller接口,通常不需要返回数据,前端可根据状态码判断是否添加成功。

5.2 service

首先校验两部分:(1)参数的数据的正确性,或者是否符合要求;(2)校验是否重复新增。

如果数据校验为不符合要求或重复新增,要抛出异常。

校验通过,向数据库中添加数据。

如果涉及多个数据表的修改数据,需要在方法上添加@Transactional 注解,来保证数据的一致性。

5.3 mapper

将数据插入到数据库表中。


http://www.kler.cn/news/284328.html

相关文章:

  • Qt 杨帆起航
  • 【分布式定时任务】XXL-JOB_2.4.1部署与实战
  • 解决Element-ui中Table表格里的show-overflow-tooltip不兼容safari浏览器问题
  • vue-admin-template pan版使用方法
  • 【秋招笔试】8.24阿里控股秋招(研发岗)-三语言题解
  • 使用极狐GitLab进行K3S集群的维护与控制
  • 进程间通信--IPC机制
  • 【技术解析】Spring Boot异步机制:实现高吞吐量的最佳实践
  • 【零知识证明】构建第一个zk
  • 95.WEB渗透测试-信息收集-Google语法(9)
  • RN开发问题
  • 线性表之数组
  • 数据结构-单链表-详解-2
  • 彩漩科技亮相第一届人工智能教育应用论坛,荣获AI教育科技产品TOP30奖项
  • 数字化转型升级探索(一)
  • 【奇某信-注册_登录安全分析报告】
  • 鸿蒙高级开发者认证题库(2)
  • RKNPU2从入门到实践 --- 【4】RKNN 模型构建【使用pycharm一步一步搭建RKNN模型】
  • GO Date数据处理
  • Python知识点:如何使用Selenium进行自动化Web测试
  • python-矩阵交换行
  • AI学习指南深度学习篇-长短时记忆网络python实践
  • 使用uniapp制作录音功能(VUE3)
  • 鸿蒙OS试题(4)
  • DSP48E2使用以及FIR滤波器定点设计实现与优化
  • 小琳AI课堂:生成对抗网络(GANs)
  • HarmonyOS开发实战( Beta5版)Web组件开发性能提升指导
  • 处理.NET Core中的时区转换问题
  • 帕金森患者在运动时有哪些类型的运动推荐?
  • SpringWeb后端开发-登录认证