“添加”业务功能开发

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

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

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

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cyt涛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值