zoukankan      html  css  js  c++  java
  • day5 业务开发中较有用代码

    逻辑删除

    删除操作若不想数据库中数据真正被删除 而是用一个标志位字段来判断
    yml中配置
    mybatis-plus:
      mapper-locations: classpath:/mapper/**/*.xml
      global-config:
        db-config:
          id-type: auto
          logic-delete-value: 1 #逻辑删除位值
          logic-not-delete-value: 0    #逻辑不删除值
    
    entity类中的标志位加上注解
        @TableLogic(value = "1",delval = "0")
        private Integer showStatus;
    
    //默认已删除的标志位是1 没删除是0
    //必须要有@TableLogic注解 注解中()的value显示 delval不显示 与yml相反

    后端请求数据校验

    1)引入依赖
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
    </dependency>
    
    2)pojo加上注解
    如@Email,@NotNull
    @NotBlank(message = "品牌名必须非空")
    
    3)controller中加上注解@Valid 开启校验
    @RequestMapping("/save")
    public R save(@Valid @RequestBody BrandEntity brand){
        brandService.save(brand);
        return R.ok();
    }
    
    //---------------------------------------------------------------
    如上若校验失败 返回的内容不是走自定义的R 
    可以将@Valid校验的方法加个入参BindingResult
    获取异常信息再放到 return返回
    
    @RequestMapping("/save")
    public R save(@Valid @RequestBody BrandEntity brand, BindingResult result){
        if( result.hasErrors()){
            Map<String,String> map=new HashMap<>();
            //1.获取错误的校验结果
            result.getFieldErrors().forEach((item)->{
                //获取发生错误时的message
                String message = item.getDefaultMessage();
                //获取发生错误的字段
                String field = item.getField();
                map.put(field,message);
            });
            return R.error(400,"提交的数据不合法").put("data",map);
        }else {
        }
        brandService.save(brand);
    
        return R.ok();
    }
    
    
    //-------------------------------------------------------------
    上面的异常处理每个接口都写一遍不方便 还能把上述异常处理统一放到@controlleradvice中
    如
    @Slf4j
    @RestControllerAdvice(basePackages = "com.atguigu.gulimall.product.controller")
    public class GulimallExceptionControllerAdvice {
    
        @ExceptionHandler(value = Exception.class) // 也可以返回ModelAndView
        public R handleValidException(MethodArgumentNotValidException exception){
            Map<String,String> map=new HashMap<>();
            // 获取数据校验的错误结果
            BindingResult bindingResult = exception.getBindingResult();
            bindingResult.getFieldErrors().forEach(fieldError -> {
                String message = fieldError.getDefaultMessage();
                String field = fieldError.getField();
                map.put(field,message);
            });
            log.error("数据校验出现问题{},异常类型{}",exception.getMessage(),exception.getClass());
            return R.error(400,"数据校验出现问题").put("data",map);
        }
    }

     分组数据校验

    实际开发中 增/改接口使用的参数校验规则是不一样的 
    如增接口id为空 修改接口id不为空
    针对不同请求对valit校验分组
    
    //pojo类权限校验注解中定义分组空接口 如AddGroup.class接口是一个啥都没有的空接口
    //controller中对使用的分组加@Validated(AddGroup.class) 
    //@Null(message = "新增不能指定id", groups = {AddGroup.class})只有controller中定义@Validated(AddGroup.class)才会生效 定义@Valit或其它分组都不会生效
    如
    @NotNull(message = "修改必须定制品牌id", groups = {UpdateGroup.class})
    @Null(message = "新增不能指定id", groups = {AddGroup.class})
    @TableId
    private Long brandId;
    
    @RequestMapping("/save")
    public R save(@Validated(AddGroup.class) @RequestBody BrandEntity brand) {
        brandService.save(brand);
        return R.ok();
    }

    vue element-ui数据校验

    <el-form :rules="dataRule" ...>
     <el-form-item label="bean名称" prop="beanName">
            <el-input ...></el-input>
    </el-form-item>
    </el-form>
    
    //表单中先定义:rules指定方法
    //prop定义需校验的字段名称
    //js return中定义校验规则
        return{
            dataRule: {
              beanName: [
                { required: true, message: '用户名不能为空', trigger: 'blur' }
              ]
            }
    或者通过validator定义校验方法
        return{
            dataRule: {
              beanName: [
                { validator: validatePass2,trigger: 'blur' }
              ]
            }
    
    var validatePass2 = (rule, value, callback) => {
        if (value === '') {
            callback(new Error('请再次输入密码'));
        } else if (value !== this.ruleForm.pass) {
            callback(new Error('两次输入密码不一致!'));
        } else {
            callback();
        }
    };
  • 相关阅读:
    AtCoder Regular Contest 093
    AtCoder Regular Contest 094
    G. Gangsters in Central City
    HGOI 20190711 题解
    HGOI20190710 题解
    HGOI 20190709 题解
    HGOI 20190708 题解
    HGOI20190707 题解
    HGOI20190706 题解
    HGOI 20190705 题解
  • 原文地址:https://www.cnblogs.com/hbhb/p/14538217.html
Copyright © 2011-2022 走看看