「Java」自定义注解 校验数据库表中的数据不可重复
一个很常见的需求,某表中的数据不能重复,我闲每次都要多加几行代码去查数据库,所以自定义了个注解
代码
/** * <p> * 数据库字段唯一值 * </p> * * @author duguotao * @version 1.0.0 * @since Created in 2022/1/26 */ @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) @Constraint(validatedBy = TableDataUnique.TableDataUniqueConstraintValidator.class) public @interface TableDataUnique { // 表明 String table(); // 字段 String column(); String message() default "参数错误"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; class TableDataUniqueConstraintValidator implements ConstraintValidator<TableDataUnique, String>, ApplicationContextAware { String table; String column; static ApplicationContext application; @Override @SuppressWarnings("all") public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { application = applicationContext; } @Override public void initialize(TableDataUnique tableDataUnique) { table = tableDataUnique.table(); column = tableDataUnique.column(); } @Override public boolean isValid(String value, ConstraintValidatorContext context) { if (StrUtil.isEmpty(table) || StrUtil.isEmpty(column)) { return false; } String solitary = ""; String sql = "select count(1) count from " + table + " where " + column + " = " + solitary + value + solitary; JdbcTemplate jdbcTemplate = application.getBean("jdbcTemplate", JdbcTemplate.class); Map<String, Object> map = jdbcTemplate.queryForMap(sql); return map.get("count").equals(0L); } } }
使用
角色表中 名称不允许重复
下一篇:
线程安全问题产生的原因