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

“添加”业务功能开发

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

1. Controller

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

步骤:

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

示例:

@RestController
@RequestMapping("/api/v1/items")
public class ItemController {@Autowiredprivate 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@Transactionalpublic 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.mrgr.cn/news/16415.html

相关文章:

  • 通过python 操作mysql 脚本
  • “品牌VS套路:华为、格行、中兴随身WiFi谁才是真良心?“
  • VMware中CentOS虚拟机配置网络(Net模式)
  • git commit添加emoji表情
  • 从零开始自学Python-之-常用库篇(十四)python的异步编程库asyncio
  • Tampermonkey 安装
  • Call openai-node in the backend or call https in the frontend?
  • 【flask】python框架flask的hello world
  • [ABC001A] 積雪深差
  • 自闭症儿童托管学校
  • 全面解读LSC局域网屏幕监控软件:功能、优势与应用场景一网打尽!
  • vaspup2.0介绍
  • spring security 会话管理
  • 如何打开终端?
  • 06:网表更新到PCB
  • macOS搭建Python3.11+Django4.2.15的平台框架使用Poetry管理
  • 最新版 Java 网络编程|万字笔记
  • Linux学习(17)-I/O复用(1)select、poll
  • BUUCTF PWN wp--jarvisoj_level0
  • 4.负载均衡