注解
/** * 自定义主键序列化 * */ @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; } }