在写任何接口时,一定要记得做参数的合法性校验
利用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都是非常实用的功能,它们通过简洁的语法和灵活的条件组合,简化了查询和更新操作的编写过程。在实际开发中,我们可以根据需求选择使用这两种功能,以达到更好的开发效率和代码质量。