myBatis-Plus中 LambdaQuery与LambdaUpdate 用法记录

470 阅读2分钟

在写任何接口时,一定要记得做参数的合法性校验

利用for循环遍历列表,进行批量增加服务,利用lambdaQuery() 链式方法,判断当前区域是否存在服务,如果存在,抛出自定义异常,下面是一个示例:

@Override
public void batchAdd(List<ServeUpsertReqDTO> serveUpsertReqDTOList) {
    for(ServeUpsertReqDTO serveUpsertReqDTO  : serveUpsertReqDTOList){
        //合法校验
        ServeItem serveItem = serveItemMapper.queryServeItemByServeId(serveUpsertReqDTO.getServeItemId());
        //1. 判断当前传入的信息是否存在 或是否已经启用
        //FoundationStatusEnum.ENABLE.getStatus() 定义的枚举类,一般不会直接使用常量
        if(ObjectUtil.isEmpty(serveItem) && serveItem.getActiveStatus() != FoundationStatusEnum.ENABLE.getStatus()){
            //抛出的自定义异常
            throw new ForbiddenOperationException("该服务未启用无法添加到区域下使用");
        }

        //2.同一个区域下不能添加相同的服务,校验是否重复新增
        Integer count = lambdaQuery()
                .eq(Serve::getRegionId, serveUpsertReqDTO.getRegionId())
                .eq(Serve::getServeItemId, serveUpsertReqDTO.getServeItemId())
                .count();
        if(count > 0){
            throw new ForbiddenOperationException(serveItem.getName()+"服务已存在");
        }

        //3.向serve表插入数据
        Serve serve = BeanUtil.toBean(serveUpsertReqDTO, Serve.class);
        Region region = regionMapper.selectById(serveUpsertReqDTO.getRegionId());
        serve.setCityCode(region.getCityCode());
        baseMapper.insert(serve);
    }

lambdaUpdate() 更新服务价格,下面是一个示例:

@Override
@Transactional
public Serve update(Long id, BigDecimal price) {
    //1.更新服务价格
boolean update = lambdaUpdate()
            .eq(Serve::getId, id)
            .set(Serve::getPrice, price)
            .update();
    if(!update){
        throw new CommonException("修改服务价格失败");
    }
    return baseMapper.selectById(id);
}

参考博客

优点:

  • LambdaQuery和LambdaUpdate都提供了简洁的语法来构建查询和更新条件,使得代码更加清晰易读。
  • 它们都支持链式调用,使得条件的组合更加灵活。
  • 它们都支持自定义查询和更新条件,使得开发者可以根据实际需求进行定制。
  • LambdaUpdate还支持乐观锁等功能,使得更新操作更加方便。

缺点:

  • LambdaQuery和LambdaUpdate都需要引入MyBatis-Plus的相关依赖,可能会增加项目的复杂度。
  • 对于一些复杂的查询和更新条件,可能需要手动编写SQL语句或条件组装代码,无法完全替代传统的MyBatis操作。
  • LambdaUpdate的乐观锁等功能需要开发者自行处理版本号等细节问题,可能会增加开发难度。

总结:

MyBatis-Plus的LambdaQuery和LambdaUpdate都是非常实用的功能,它们通过简洁的语法和灵活的条件组合,简化了查询和更新操作的编写过程。在实际开发中,我们可以根据需求选择使用这两种功能,以达到更好的开发效率和代码质量。