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;
        }
    
    }
  • 相关阅读:
    转载 如何去掉超链接文字下的下划线
    Fedora 15安装 VirtualBox 4.1
    庆祝开通!
    Delphi直接读写XML修改版
    Perforce的资料一点也没查到
    AxWebBrowser的Navigate2方法写参数的偷懒方法
    腾讯2012实习生面试
    如何让div在IE6下自适应
    PhpStorm修改字体
    监听url
  • 原文地址:https://www.cnblogs.com/g-sheng/p/10277601.html
Copyright © 2011-2022 走看看