浏览代码

wrapper 支持 setParamAlias

miemie 4 年之前
父节点
当前提交
476f11c7df

+ 23 - 2
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/AbstractWrapper.java

@@ -58,6 +58,10 @@ public abstract class AbstractWrapper<T, R, Children extends AbstractWrapper<T,
      */
      */
     protected AtomicInteger paramNameSeq;
     protected AtomicInteger paramNameSeq;
     protected Map<String, Object> paramNameValuePairs;
     protected Map<String, Object> paramNameValuePairs;
+    /**
+     * 其他
+     */
+    protected SharedString paramAlias;
     protected SharedString lastSql;
     protected SharedString lastSql;
     /**
     /**
      * SQL注释
      * SQL注释
@@ -68,7 +72,6 @@ public abstract class AbstractWrapper<T, R, Children extends AbstractWrapper<T,
      */
      */
     protected SharedString sqlFirst;
     protected SharedString sqlFirst;
     /**
     /**
-     * ß
      * 数据库表映射实体类
      * 数据库表映射实体类
      */
      */
     private T entity;
     private T entity;
@@ -421,7 +424,7 @@ public abstract class AbstractWrapper<T, R, Children extends AbstractWrapper<T,
      */
      */
     protected final String formatParam(String mapping, Object param) {
     protected final String formatParam(String mapping, Object param) {
         final String genParamName = Constants.WRAPPER_PARAM + paramNameSeq.incrementAndGet();
         final String genParamName = Constants.WRAPPER_PARAM + paramNameSeq.incrementAndGet();
-        final String paramStr = Constants.WRAPPER_PARAM_PREFIX + genParamName;
+        final String paramStr = getParamAlias() + Constants.WRAPPER_PARAM_MIDDLE + genParamName;
         paramNameValuePairs.put(genParamName, param);
         paramNameValuePairs.put(genParamName, param);
         return SqlScriptUtils.safeParam(paramStr, mapping);
         return SqlScriptUtils.safeParam(paramStr, mapping);
     }
     }
@@ -515,6 +518,24 @@ public abstract class AbstractWrapper<T, R, Children extends AbstractWrapper<T,
         return paramNameValuePairs;
         return paramNameValuePairs;
     }
     }
 
 
+    public String getParamAlias() {
+        return paramAlias == null ? Constants.WRAPPER : paramAlias.getStringValue();
+    }
+
+    /**
+     * 参数别名设置,初始化时优先设置该值、重复设置异常
+     *
+     * @param paramAlias 参数别名
+     * @return Children
+     */
+    public Children setParamAlias(String paramAlias) {
+        Assert.notEmpty(paramAlias, "paramAlias can not be empty!");
+        Assert.isEmpty(paramNameValuePairs, "Please call this method before working!");
+        Assert.isNull(this.paramAlias, "Please do not call the method repeatedly!");
+        this.paramAlias = new SharedString(paramAlias);
+        return typedThis;
+    }
+
     /**
     /**
      * 获取 columnName
      * 获取 columnName
      */
      */

+ 3 - 2
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/query/LambdaQueryWrapper.java

@@ -58,7 +58,7 @@ public class LambdaQueryWrapper<T> extends AbstractLambdaWrapper<T, LambdaQueryW
     }
     }
 
 
     LambdaQueryWrapper(T entity, Class<T> entityClass, SharedString sqlSelect, AtomicInteger paramNameSeq,
     LambdaQueryWrapper(T entity, Class<T> entityClass, SharedString sqlSelect, AtomicInteger paramNameSeq,
-                       Map<String, Object> paramNameValuePairs, MergeSegments mergeSegments,
+                       Map<String, Object> paramNameValuePairs, MergeSegments mergeSegments, SharedString paramAlias,
                        SharedString lastSql, SharedString sqlComment, SharedString sqlFirst) {
                        SharedString lastSql, SharedString sqlComment, SharedString sqlFirst) {
         super.setEntity(entity);
         super.setEntity(entity);
         super.setEntityClass(entityClass);
         super.setEntityClass(entityClass);
@@ -66,6 +66,7 @@ public class LambdaQueryWrapper<T> extends AbstractLambdaWrapper<T, LambdaQueryW
         this.paramNameValuePairs = paramNameValuePairs;
         this.paramNameValuePairs = paramNameValuePairs;
         this.expression = mergeSegments;
         this.expression = mergeSegments;
         this.sqlSelect = sqlSelect;
         this.sqlSelect = sqlSelect;
+        this.paramAlias = paramAlias;
         this.lastSql = lastSql;
         this.lastSql = lastSql;
         this.sqlComment = sqlComment;
         this.sqlComment = sqlComment;
         this.sqlFirst = sqlFirst;
         this.sqlFirst = sqlFirst;
@@ -120,7 +121,7 @@ public class LambdaQueryWrapper<T> extends AbstractLambdaWrapper<T, LambdaQueryW
     @Override
     @Override
     protected LambdaQueryWrapper<T> instance() {
     protected LambdaQueryWrapper<T> instance() {
         return new LambdaQueryWrapper<>(getEntity(), getEntityClass(), null, paramNameSeq, paramNameValuePairs,
         return new LambdaQueryWrapper<>(getEntity(), getEntityClass(), null, paramNameSeq, paramNameValuePairs,
-            new MergeSegments(), SharedString.emptyString(), SharedString.emptyString(), SharedString.emptyString());
+            new MergeSegments(), paramAlias, SharedString.emptyString(), SharedString.emptyString(), SharedString.emptyString());
     }
     }
 
 
     @Override
     @Override

+ 1 - 1
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/query/QueryWrapper.java

@@ -100,7 +100,7 @@ public class QueryWrapper<T> extends AbstractWrapper<T, String, QueryWrapper<T>>
      */
      */
     public LambdaQueryWrapper<T> lambda() {
     public LambdaQueryWrapper<T> lambda() {
         return new LambdaQueryWrapper<>(getEntity(), getEntityClass(), sqlSelect, paramNameSeq, paramNameValuePairs,
         return new LambdaQueryWrapper<>(getEntity(), getEntityClass(), sqlSelect, paramNameSeq, paramNameValuePairs,
-            expression, lastSql, sqlComment, sqlFirst);
+            expression, paramAlias, lastSql, sqlComment, sqlFirst);
     }
     }
 
 
     /**
     /**

+ 3 - 2
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/update/LambdaUpdateWrapper.java

@@ -61,7 +61,7 @@ public class LambdaUpdateWrapper<T> extends AbstractLambdaWrapper<T, LambdaUpdat
     }
     }
 
 
     LambdaUpdateWrapper(T entity, Class<T> entityClass, List<String> sqlSet, AtomicInteger paramNameSeq,
     LambdaUpdateWrapper(T entity, Class<T> entityClass, List<String> sqlSet, AtomicInteger paramNameSeq,
-                        Map<String, Object> paramNameValuePairs, MergeSegments mergeSegments,
+                        Map<String, Object> paramNameValuePairs, MergeSegments mergeSegments, SharedString paramAlias,
                         SharedString lastSql, SharedString sqlComment, SharedString sqlFirst) {
                         SharedString lastSql, SharedString sqlComment, SharedString sqlFirst) {
         super.setEntity(entity);
         super.setEntity(entity);
         super.setEntityClass(entityClass);
         super.setEntityClass(entityClass);
@@ -69,6 +69,7 @@ public class LambdaUpdateWrapper<T> extends AbstractLambdaWrapper<T, LambdaUpdat
         this.paramNameSeq = paramNameSeq;
         this.paramNameSeq = paramNameSeq;
         this.paramNameValuePairs = paramNameValuePairs;
         this.paramNameValuePairs = paramNameValuePairs;
         this.expression = mergeSegments;
         this.expression = mergeSegments;
+        this.paramAlias = paramAlias;
         this.lastSql = lastSql;
         this.lastSql = lastSql;
         this.sqlComment = sqlComment;
         this.sqlComment = sqlComment;
         this.sqlFirst = sqlFirst;
         this.sqlFirst = sqlFirst;
@@ -101,7 +102,7 @@ public class LambdaUpdateWrapper<T> extends AbstractLambdaWrapper<T, LambdaUpdat
     @Override
     @Override
     protected LambdaUpdateWrapper<T> instance() {
     protected LambdaUpdateWrapper<T> instance() {
         return new LambdaUpdateWrapper<>(getEntity(), getEntityClass(), null, paramNameSeq, paramNameValuePairs,
         return new LambdaUpdateWrapper<>(getEntity(), getEntityClass(), null, paramNameSeq, paramNameValuePairs,
-            new MergeSegments(), SharedString.emptyString(), SharedString.emptyString(), SharedString.emptyString());
+            new MergeSegments(), paramAlias, SharedString.emptyString(), SharedString.emptyString(), SharedString.emptyString());
     }
     }
 
 
     @Override
     @Override

+ 1 - 1
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/update/UpdateWrapper.java

@@ -95,7 +95,7 @@ public class UpdateWrapper<T> extends AbstractWrapper<T, String, UpdateWrapper<T
      */
      */
     public LambdaUpdateWrapper<T> lambda() {
     public LambdaUpdateWrapper<T> lambda() {
         return new LambdaUpdateWrapper<>(getEntity(), getEntityClass(), sqlSet, paramNameSeq, paramNameValuePairs,
         return new LambdaUpdateWrapper<>(getEntity(), getEntityClass(), sqlSet, paramNameSeq, paramNameValuePairs,
-            expression, lastSql, sqlComment, sqlFirst);
+            expression, paramAlias, lastSql, sqlComment, sqlFirst);
     }
     }
 
 
     @Override
     @Override

+ 11 - 0
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/Assert.java

@@ -105,6 +105,17 @@ public final class Assert {
         isTrue(CollectionUtils.isNotEmpty(map), message, params);
         isTrue(CollectionUtils.isNotEmpty(map), message, params);
     }
     }
 
 
+    /**
+     * 断言这个 map 为 empty
+     * <p>为 empty 则抛异常</p>
+     *
+     * @param map     集合
+     * @param message 消息
+     */
+    public static void isEmpty(Map<?, ?> map, String message, Object... params) {
+        isTrue(CollectionUtils.isEmpty(map), message, params);
+    }
+
     /**
     /**
      * 断言这个 数组 不为 empty
      * 断言这个 数组 不为 empty
      * <p>为 empty 则抛异常</p>
      * <p>为 empty 则抛异常</p>

+ 1 - 1
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/Constants.java

@@ -138,5 +138,5 @@ public interface Constants extends StringPool, Serializable {
      * wrapper 内部参数相关
      * wrapper 内部参数相关
      */
      */
     String WRAPPER_PARAM = "MPGENVAL";
     String WRAPPER_PARAM = "MPGENVAL";
-    String WRAPPER_PARAM_PREFIX = WRAPPER_DOT + "paramNameValuePairs" + DOT;
+    String WRAPPER_PARAM_MIDDLE = ".paramNameValuePairs" + DOT;
 }
 }