数据唯一性校验

数据唯一性校验

在业务中,很多场景需要对数据进行唯一性校验,举例说明如下:

  • 管理员可以修改商品名称和商品权重(权重高的排在前面),但商品名称和权重不能重复

参数

/*  *  入参,仅列举使用到的参数  */ @Data public class ProductDTO{     /**      * 商品ID      */     private String id;          /**      * 商品名称      */     private String name;          /**      * 商品权重      */     private Integer weight; } 
/*  *  实体类  */ @Data public class Product{     /**      * 商品ID      */     private String id;          /**      * 商品名称      */     private String name;          /**      * 商品权重      */     private Integer weight;          /**      * 更新时间      */     private Integer modified; } 

控制层

/*  *  控制层  */  @Resource private ProductService productService;   /*  * 此处仅做演示,根据实际使用包装返回数据  */ @PostMapping(test) public String updateProduct(@RequestBody ProductDTO productDto) {     if(productService.updateProduct(productDto)) {         return 修改成功;     }     return 修改失败; } 

服务层

/*  * 服务层  */  Boolean updateProduct(ProductDTO productDto);  /*  * 服务层实现类  */  @Resource private ProductMapper productMapper;  @Override public Boolean updateProduct(ProductDTO productDto) {          //查询商品名称是否重合         LambdaQueryWrapper<Product> nameWrapper = Wrappers.lambdaQuery();         nameWrapper.eq(Product::getName, productDto.getName());         nameWrapper.notIn(Product::getId, productDto.getId());          //查询权重是否重合         LambdaQueryWrapper<Product> weightWrapper = Wrappers.lambdaQuery();         weightWrapper.eq(Product::getWeight, productDto.getWeight());         weightWrapper.notIn(Product::getId, productDto.getId());              if (productMapper.selectCount(nameWrapper) > 0) {             throw new ServiceException(该商品已存在);         }         if (productMapper.selectCount(weightWrapper) > 0) {             throw new ServiceException(该权重已存在);         }     	Product product = new Product();         BeanUtils.copyProperties(productDto, product);         product.setModified(DateUtils.currTime4Second());         return this.updateById(product); }