瀏覽代碼

添加自动处理EntityWrapper方法中的MessageFormat Params类型为字符串的参数:
1、是字符串且没有单引号的自动添加单引号。
2、是字符串且含有成对的单引号的忽略。
3、非字符串类型的忽略。

yanghu 9 年之前
父節點
當前提交
3a2324335b

+ 21 - 0
mybatis-plus/src/main/java/com/baomidou/mybatisplus/mapper/EntityWrapper.java

@@ -341,7 +341,9 @@ public class EntityWrapper<T> implements Serializable {
 
 
 
 
     /**
     /**
+     * <p>
      * 格式化SQL
      * 格式化SQL
+     * </p>
      *
      *
      * @param sqlStr SQL语句部分
      * @param sqlStr SQL语句部分
      * @param params 参数集
      * @param params 参数集
@@ -352,7 +354,9 @@ public class EntityWrapper<T> implements Serializable {
     }
     }
 
 
     /**
     /**
+     * <p>
      * 根据需要格式化SQL
      * 根据需要格式化SQL
+     * </p>
      *
      *
      * @param need   是否需要格式化
      * @param need   是否需要格式化
      * @param sqlStr SQL语句部分
      * @param sqlStr SQL语句部分
@@ -364,9 +368,26 @@ public class EntityWrapper<T> implements Serializable {
             return null;
             return null;
         }
         }
         if (null != params && params.length > 0) {
         if (null != params && params.length > 0) {
+            dealParams(params);
             sqlStr = MessageFormat.format(sqlStr, params);
             sqlStr = MessageFormat.format(sqlStr, params);
         }
         }
         return sqlStr;
         return sqlStr;
     }
     }
 
 
+    /**
+     * <p>
+     * 处理String类型的参数,自动添加单引号 'value'.
+     * 如果当前字符串已经包含单引号,则不做修改
+     * </p>
+     *
+     * @param params 参数集
+     */
+    protected void dealParams(Object[] params) {
+        for (int i = 0; i < params.length; i++) {
+            Object tempVal = params[i];
+            if (tempVal instanceof String && !String.valueOf(tempVal).matches("\'(.+)\'")) {
+                params[i] = StringUtils.quotaMark(String.valueOf(tempVal));
+            }
+        }
+    }
 }
 }

+ 22 - 0
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/EntityWrapperTest.java

@@ -164,4 +164,26 @@ public class EntityWrapperTest {
         Assert.assertEquals("WHERE (aa='bb')", sqlPart);
         Assert.assertEquals("WHERE (aa='bb')", sqlPart);
     }
     }
 
 
+    /**
+     * 测试带单引号的值是否不会再次添加单引号
+     */
+    @Test
+    public void testNul14() {
+        ew.where("id={0}", "'11'").and("name={0}", 22);
+        String sqlPart = ew.getSqlSegment();
+        System.out.println("sql ==> " + sqlPart);
+        Assert.assertEquals("WHERE (id='11' AND name=22)", sqlPart);
+    }
+
+    /**
+     * 测试带不带单引号的值是否会自动添加单引号
+     */
+    @Test
+    public void testNul15() {
+        ew.where("id={0}", "11").and("name={0}", 22);
+        String sqlPart = ew.getSqlSegment();
+        System.out.println("sql ==> " + sqlPart);
+        Assert.assertEquals("WHERE (id='11' AND name=22)", sqlPart);
+    }
+
 }
 }