瀏覽代碼

修复 pg 数据库字段在 entity 里手动加了转义符会出现的 bug

miemie 6 年之前
父節點
當前提交
fa1a9c7b56

+ 6 - 0
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/toolkit/sql/SqlUtils.java

@@ -19,6 +19,7 @@ import com.baomidou.mybatisplus.annotation.DbType;
 import com.baomidou.mybatisplus.core.enums.SqlLike;
 import com.baomidou.mybatisplus.core.toolkit.Assert;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 
 /**
  * <p>
@@ -88,6 +89,11 @@ public class SqlUtils {
     public static String sqlWordConvert(DbType dbType, String val, boolean isColumn) {
         if (dbType == DbType.POSTGRE_SQL) {
             if (isColumn && val.toLowerCase().equals(val)) {
+                // 是数据库字段,并且全小写之后和原值一样,直接返回
+                return val;
+            }
+            if (isColumn && !StringUtils.isColumnName(val)) {
+                // 是数据库字段,并且手动加了转义符,直接返回
                 return val;
             }
             return String.format("\"%s\"", val);

+ 4 - 4
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/postgres/PostgresTestDataMapperTest.java

@@ -60,7 +60,7 @@ public class PostgresTestDataMapperTest {
             Long id = (long) i;
             commonMapper.insert(new CommonData().setTestInt(i).setTestStr(String.format("第%s条数据", i)).setId(id));
             commonLogicMapper.insert(new CommonLogicData().setTestInt(i).setTestStr(String.format("第%s条数据", i)).setId(id));
-            pgMapper.insert(new PgData().setGroup(i).setId(id));
+            pgMapper.insert(new PgData().setGroup(i).setId(id).setPgInt(i).setPgInt2(i));
         }
     }
 
@@ -165,8 +165,8 @@ public class PostgresTestDataMapperTest {
         Assert.assertTrue(CollectionUtils.isNotEmpty(commonLogicMapper.selectByMap(map)));
         Map<String, Object> map2 = new HashMap<>();
         map2.put("id", 9L);
-        map2.put("group", 9);
-        map2.put("pgInt", 9);
+        map2.put("\"group\"", 9);
+        map2.put("\"pgInt\"", 9);
         Assert.assertTrue(CollectionUtils.isNotEmpty(pgMapper.selectByMap(map2)));
     }
 
@@ -225,6 +225,6 @@ public class PostgresTestDataMapperTest {
         Assert.assertTrue(CollectionUtils.isNotEmpty(commonLogicMapper.selectList(new QueryWrapper<CommonLogicData>()
             .apply("test_int = 12"))));
         Assert.assertTrue(CollectionUtils.isNotEmpty(pgMapper.selectList(new QueryWrapper<PgData>()
-            .apply("group = 12").apply("pgInt = 12"))));
+            .apply("\"group\" = 12").apply("\"pgInt\" = 12"))));
     }
 }