You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

非Spring环境下原生SQL增改前的轻量数据验证方案求推荐

原生SQL操作前的轻量级非Spring数据验证方案

1. Apache Commons Validator

这是Apache官方的轻量级通用验证工具包,完全独立于Spring生态,适合快速实现常见规则的校验:

  • 内置大量开箱即用的校验规则:非空判断、邮箱格式、手机号格式、日期合法性等,无需手动编写if(String.isBlank(...))这类重复代码。
  • 支持两种使用方式:
    • 直接调用工具类方法做单字段校验,比如:
      // 校验邮箱格式
      boolean isEmailValid = EmailValidator.getInstance().isValid(user.getEmail());
      // 校验字符串非空(配合Commons Lang)
      boolean isUsernameValid = StringUtils.isNotBlank(user.getUsername());
      
    • 通过配置文件(XML)或代码定义对象的校验规则,实现批量字段校验,减少重复逻辑。

2. Hibernate Validator(独立使用)

它是JSR-380(Bean Validation)标准的实现,常与Spring配合,但完全可以脱离Spring单独使用,是轻量且功能完善的选择:

  • 用法:给实体类字段添加标准校验注解,然后通过Validator实例一次性校验整个对象,自动收集所有错误信息。
  • 示例代码:
    首先给实体类加注解:
    public class User {
        @NotNull(message = "邮箱不能为空")
        @Email(message = "邮箱格式不符合要求")
        private String email;
    
        @NotBlank(message = "用户名不能为空")
        @Size(min = 2, max = 20, message = "用户名长度需在2-20字符之间")
        private String username;
    
        // getter、setter方法
    }
    
    然后执行校验:
    // 初始化Validator工厂(全局只需初始化一次)
    ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
    Validator validator = factory.getValidator();
    
    User user = new User();
    user.setEmail("wrong-email-format");
    
    // 执行校验,获取所有违规信息
    Set<ConstraintViolation<User>> violations = validator.validate(user);
    for (ConstraintViolation<User> violation : violations) {
        // 处理错误信息,比如收集到列表返回
        System.out.println(violation.getMessage());
    }
    
    这种方式能一次性完成所有字段的规则校验,无需逐个编写判断逻辑。

3. 自定义轻量校验工具(极简场景)

如果不想引入第三方依赖,可以自己实现一个基于反射+自定义注解的极简校验工具,代码量小且灵活:

  • 步骤1:定义自定义校验注解
    @Target(ElementType.FIELD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface NotEmpty {
        String message() default "字段不能为空";
    }
    
    @Target(ElementType.FIELD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface ValidEmail {
        String message() default "邮箱格式不正确";
    }
    
  • 步骤2:实现校验工具类
    import java.lang.reflect.Field;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.regex.Pattern;
    
    public class SimpleValidator {
        // 邮箱正则
        private static final Pattern EMAIL_PATTERN = Pattern.compile("^[a-zA-Z0-9_+&*-]+(?:\\.[a-zA-Z0-9_+&*-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,7}$");
    
        public static List<String> validate(Object obj) throws IllegalAccessException {
            List<String> errors = new ArrayList<>();
            Field[] fields = obj.getClass().getDeclaredFields();
    
            for (Field field : fields) {
                field.setAccessible(true);
                Object value = field.get(obj);
    
                // 校验@NotEmpty注解
                if (field.isAnnotationPresent(NotEmpty.class)) {
                    NotEmpty anno = field.getAnnotation(NotEmpty.class);
                    if (value == null || (value instanceof String && String.isBlank((String) value))) {
                        errors.add(anno.message());
                    }
                }
    
                // 校验@ValidEmail注解
                if (field.isAnnotationPresent(ValidEmail.class)) {
                    ValidEmail anno = field.getAnnotation(ValidEmail.class);
                    if (value != null && value instanceof String) {
                        if (!EMAIL_PATTERN.matcher((String) value).matches()) {
                            errors.add(anno.message());
                        }
                    }
                }
            }
            return errors;
        }
    }
    
  • 使用时直接调用:
    User user = new User();
    user.setEmail("invalid-email");
    List<String> errors = SimpleValidator.validate(user);
    // 处理错误列表
    

内容的提问来源于stack exchange,提问作者testjava dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 03:55:24