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;
        }
    
    }
  • 相关阅读:
    (2)链表有哪几种分类——4
    (1)有哪几种表的实现方式——4
    链表基本操作
    多窗口
    UI线程和work线程
    模板
    (二)tensorflow-gpu2.0之自动导数
    (一)tensorflow-gpu2.0学习笔记之开篇(cpu和gpu计算速度比较)
    高阶函数及map、reduce、filter、lambda、sorted等函数的应用
    迭代器
  • 原文地址:https://www.cnblogs.com/g-sheng/p/10277601.html
Copyright © 2011-2022 走看看