Ver código fonte

修改乐观锁

= 8 anos atrás
pai
commit
ed277d04a1

+ 22 - 17
src/main/java/com/baomidou/mybatisplus/plugins/OptimisticLockerInterceptor.java

@@ -48,8 +48,7 @@ import com.baomidou.mybatisplus.toolkit.TableInfoHelper;
  * @author yuxiaobin
  * @date 2017/5/24
  */
-@Intercepts({
-        @Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class})})
+@Intercepts({@Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class})})
 public class OptimisticLockerInterceptor implements Interceptor {
 
     private final Map<Class<?>, EntityField> versionFieldCache = new HashMap<>();
@@ -66,7 +65,7 @@ public class OptimisticLockerInterceptor implements Interceptor {
     public Object intercept(Invocation invocation) throws Throwable {
         Object[] args = invocation.getArgs();
         MappedStatement ms = (MappedStatement) args[0];
-        if (SqlCommandType.UPDATE.compareTo(ms.getSqlCommandType()) != 0) {
+        if (SqlCommandType.UPDATE != ms.getSqlCommandType()) {
             return invocation.proceed();
         }
         Object param = args[1];
@@ -102,7 +101,7 @@ public class OptimisticLockerInterceptor implements Interceptor {
                 if (PARAM_UPDATE_METHOD_NAME.equals(updateMethodName)) {//update(entity, null) -->> update all. ignore version
                     return invocation.proceed();
                 }
-                EntityField entityField = getVersionField(et.getClass());
+                EntityField entityField = this.getVersionField(et.getClass());
                 Field versionField = entityField == null ? null : entityField.getField();
                 Object originalVersionVal;
                 if (versionField != null && (originalVersionVal = versionField.get(et)) != null) {
@@ -162,9 +161,8 @@ public class OptimisticLockerInterceptor implements Interceptor {
             return new Date();
         } else if (Timestamp.class.equals(versionValClass)) {
             return new Timestamp(System.currentTimeMillis());
-        } else {
-            return originalVersionVal;//not supported type, return original val.
         }
+        return originalVersionVal;//not supported type, return original val.
     }
 
     @Override
@@ -177,21 +175,29 @@ public class OptimisticLockerInterceptor implements Interceptor {
 
     @Override
     public void setProperties(Properties properties) {
-
+        // to do nothing
     }
 
     private EntityField getVersionField(Class<?> parameterClass) {
         synchronized (parameterClass.getName()) {
             if (versionFieldCache.containsKey(parameterClass)) {
                 return versionFieldCache.get(parameterClass);
-            } else {
-                EntityField field = getVersionFieldRegular(parameterClass);
-                versionFieldCache.put(parameterClass, field);
-                return field;
             }
+            // 缓存类信息
+            EntityField field = this.getVersionFieldRegular(parameterClass);
+            versionFieldCache.put(parameterClass, field);
+            return field;
         }
     }
 
+    /**
+     * <p>
+     * 反射检查参数类是否启动乐观锁
+     * </p>
+     *
+     * @param parameterClass 参数类
+     * @return
+     */
     private EntityField getVersionFieldRegular(Class<?> parameterClass) {
         if (parameterClass != Object.class) {
             for (Field field : parameterClass.getDeclaredFields()) {
@@ -200,7 +206,8 @@ public class OptimisticLockerInterceptor implements Interceptor {
                     return new EntityField(field, true);
                 }
             }
-            return getVersionFieldRegular(parameterClass.getSuperclass());
+            // 递归父类
+            return this.getVersionFieldRegular(parameterClass.getSuperclass());
         }
         return null;
     }
@@ -208,11 +215,10 @@ public class OptimisticLockerInterceptor implements Interceptor {
     private List<EntityField> getEntityFields(Class<?> parameterClass) {
         if (entityFieldsCache.containsKey(parameterClass)) {
             return entityFieldsCache.get(parameterClass);
-        } else {
-            List<EntityField> fields = getFieldsFromClazz(parameterClass, null);
-            entityFieldsCache.put(parameterClass, fields);
-            return fields;
         }
+        List<EntityField> fields = this.getFieldsFromClazz(parameterClass, null);
+        entityFieldsCache.put(parameterClass, fields);
+        return fields;
     }
 
     private List<EntityField> getFieldsFromClazz(Class<?> parameterClass, List<EntityField> fieldList) {
@@ -230,7 +236,6 @@ public class OptimisticLockerInterceptor implements Interceptor {
         }
         return fieldList;
     }
-
 }
 
 class EntityField {