• 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;
        }
    
    }
  • 相关阅读:
    [杂谈]关于前端如何学习框架的一点牢骚
    【2018】面试复习大纲
    迟来的2017总结
    [转载并收藏]JavaScript 疲劳终极指南:我们行业的真相
    想做好产品,一定要成为自己产品的用户
    2017年个人提升计划
    Chrome新发现
    不要被所在的公司或企业绑架
    半夜不想睡有感
    2016年总结
  • 原文地址:https://www.cnblogs.com/g-sheng/p/10277601.html
Copyright © 2020-2023  润新知