zoukankan      html  css  js  c++  java
  • mybatis自定义主键序列化

    注解

    /**
     * 自定义主键序列化
     *
     */
    
    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.METHOD,ElementType.TYPE})
    public @interface WhaleCloudDBKeySequence {
    
        String keySeqName() default "";
    
    }

    需要序列化对象

    @Data
    @WhaleCloudDBKeySequence(keySeqName = "itemId")
    public class OrderItem {
    
        private String itemId;
    }

    mapper方法

    @Mapper
    public interface OrderItemMapper extends BaseMapper<OrderItem> {
    
        @WhaleCloudDBKeySequence
        int saveOrderItem(List<OrderItem> dto);
    
    }

    实现

    @Aspect
    @Component
    public class MapperKeySeqAop {
    
    
        @Around("execution(* com.iwhalecloud.retail.order2b.mapper.*.*(..)) ")
        public Object builderKeySeq(ProceedingJoinPoint point) throws Throwable {
            MethodSignature signature = (MethodSignature) point.getSignature();
            Method method = signature.getMethod();
    
            WhaleCloudDBKeySequence annotationPresent = method.getAnnotation(WhaleCloudDBKeySequence.class);
            if (annotationPresent == null) {
                return point.proceed();
            }
    
            Object prams = point.getArgs()[0];
            if (prams instanceof List && !CollectionUtils.isEmpty((Collection<?>) prams)) {
                List list = (List) prams;
                for (Object object : list) {
                    if (!updateKeySeq(object)) {
                        break;
                    }
                }
            } else {
                updateKeySeq(prams);
            }
            return point.proceed();
        }
    
        @Autowired
        private WhaleCloudKeyGenerator whaleCloudKeyGenerator;
    
        private boolean updateKeySeq(Object o) throws Exception {
            WhaleCloudDBKeySequence paramsConfig = o.getClass().getAnnotation(WhaleCloudDBKeySequence.class);
            if (paramsConfig == null || StringUtils.isEmpty(paramsConfig.keySeqName())) {
                return false;
            }
            Field field = o.getClass().getDeclaredField(paramsConfig.keySeqName());
            field.setAccessible(true);
            String val = whaleCloudKeyGenerator.mysqlKeySeq(paramsConfig.keySeqName());
            field.set(o, val);
            field.setAccessible(false);
            return true;
        }
    
    }
  • 相关阅读:
    go-micro registry 服务的注册和发现
    Element UI
    VUE常用插件和依赖的安装!
    Element dialog实现拖拽功能
    JAVA
    修改windows的host文件
    Vue
    Vue
    Vue
    Vue
  • 原文地址:https://www.cnblogs.com/g-sheng/p/10277601.html
Copyright © 2011-2022 走看看