miemie 7 gadi atpakaļ
vecāks
revīzija
d7b4100aa5

+ 13 - 17
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/injector/methods/LogicUpdateById.java

@@ -21,6 +21,7 @@ import org.apache.ibatis.mapping.SqlSource;
 import com.baomidou.mybatisplus.core.enums.SqlMethod;
 import com.baomidou.mybatisplus.core.metadata.TableInfo;
 import com.baomidou.mybatisplus.extension.injector.LogicAbstractMethod;
+import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
 
 /**
  * <p>
@@ -35,25 +36,20 @@ public class LogicUpdateById extends LogicAbstractMethod {
     @Override
     public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
         String sql;
+        boolean logicDelete = tableInfo.isLogicDelete();
         SqlMethod sqlMethod = SqlMethod.UPDATE_BY_ID;
-        if (tableInfo.isLogicDelete()) {
-
-            sql = String.format(sqlMethod.getSql(), tableInfo.getTableName(), sqlSet(true, false, tableInfo, "et."),
-                tableInfo.getKeyColumn(), new StringBuilder("et.").append(tableInfo.getKeyProperty()).toString(),
-                new StringBuilder("<if test=\"et instanceof java.util.Map\">")
-                    .append("<if test=\"et.MP_OPTLOCK_VERSION_ORIGINAL!=null\">")
-                    .append(" AND ${et.MP_OPTLOCK_VERSION_COLUMN}=#{et.MP_OPTLOCK_VERSION_ORIGINAL}")
-                    .append("</if></if>").append(getLogicDeleteSql(true,tableInfo)));
-        } else {
-            sqlMethod = SqlMethod.UPDATE_BY_ID;
-            sql = String.format(sqlMethod.getSql(), tableInfo.getTableName(),
-                sqlSet(false, false, tableInfo, "et."),
-                tableInfo.getKeyColumn(), "et." + tableInfo.getKeyProperty(),
-                new StringBuilder("<if test=\"et instanceof java.util.Map\">")
-                    .append("<if test=\"et.MP_OPTLOCK_VERSION_ORIGINAL!=null\">")
-                    .append(" AND ${et.MP_OPTLOCK_VERSION_COLUMN}=#{et.MP_OPTLOCK_VERSION_ORIGINAL}")
-                    .append("</if></if>"));
+        StringBuilder append = new StringBuilder("<if test=\"et instanceof java.util.Map\">")
+            .append("<if test=\"et.").append(OptimisticLockerInterceptor.MP_OPTLOCK_VERSION_ORIGINAL).append("!=null\">")
+            .append(" AND ${et.").append(OptimisticLockerInterceptor.MP_OPTLOCK_VERSION_COLUMN)
+            .append("}=#{et.").append(OptimisticLockerInterceptor.MP_OPTLOCK_VERSION_ORIGINAL).append("}")
+            .append("</if></if>");
+        if (logicDelete) {
+            append.append(getLogicDeleteSql(true, tableInfo));
         }
+        sql = String.format(sqlMethod.getSql(), tableInfo.getTableName(),
+            sqlSet(logicDelete, false, tableInfo, "et."),
+            tableInfo.getKeyColumn(), "et." + tableInfo.getKeyProperty(),
+            append);
         SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, modelClass);
         return addUpdateMappedStatement(mapperClass, modelClass, sqlMethod.getMethod(), sqlSource);
     }

+ 2 - 2
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/OptimisticLockerInterceptor.java

@@ -55,8 +55,8 @@ public class OptimisticLockerInterceptor implements Interceptor {
     private final Map<Class<?>, EntityField> versionFieldCache = new ConcurrentHashMap<>();
     private final Map<Class<?>, List<EntityField>> entityFieldsCache = new ConcurrentHashMap<>();
 
-    private static final String MP_OPTLOCK_VERSION_ORIGINAL = "MP_OPTLOCK_VERSION_ORIGINAL";
-    private static final String MP_OPTLOCK_VERSION_COLUMN = "MP_OPTLOCK_VERSION_COLUMN";
+    public static final String MP_OPTLOCK_VERSION_ORIGINAL = "MP_OPTLOCK_VERSION_ORIGINAL";
+    public static final String MP_OPTLOCK_VERSION_COLUMN = "MP_OPTLOCK_VERSION_COLUMN";
     public static final String MP_OPTLOCK_ET_ORIGINAL = "MP_OPTLOCK_ET_ORIGINAL";
     private static final String NAME_ENTITY = "et";
     private static final String NAME_ENTITY_WRAPPER = "ew";

+ 2 - 10
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/mysql/config/MybatisPlusConfig.java

@@ -42,18 +42,10 @@ public class MybatisPlusConfig {
         /* 分页插件 */
         PaginationInterceptor pagination = new PaginationInterceptor();
         configuration.addInterceptor(pagination);
-
-        /** 乐观锁插件 */
+        /* 乐观锁插件 */
         configuration.addInterceptor(new OptimisticLockerInterceptor());
-
         sqlSessionFactory.setConfiguration(configuration);
-//        pagination.setLocalPage(true);
-//        OptimisticLockerInterceptor optLock = new OptimisticLockerInterceptor();
-//        sqlSessionFactory.setPlugins(new Interceptor[]{
-//            pagination,
-//            optLock,
-//            new PerformanceInterceptor()
-//        });
+        /* 自动填充插件 */
         globalConfig.setMetaObjectHandler(new MysqlMetaObjectHandler());
         sqlSessionFactory.setGlobalConfig(globalConfig);
         return sqlSessionFactory.getObject();