瀏覽代碼

优化 pr

miemie 5 年之前
父節點
當前提交
ef5306343c

+ 5 - 4
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/AbstractWrapper.java

@@ -65,8 +65,9 @@ public abstract class AbstractWrapper<T, R, Children extends AbstractWrapper<T,
     /**
     /**
      * SQL起始语句
      * SQL起始语句
      */
      */
-    protected SharedString sqlFirst = SharedString.emptyString();
-    /**ß
+    protected SharedString sqlFirst;
+    /**
+     * ß
      * 数据库表映射实体类
      * 数据库表映射实体类
      */
      */
     private T entity;
     private T entity;
@@ -238,7 +239,7 @@ public abstract class AbstractWrapper<T, R, Children extends AbstractWrapper<T,
 
 
     @Override
     @Override
     public Children first(boolean condition, String firstSql) {
     public Children first(boolean condition, String firstSql) {
-        if(condition) {
+        if (condition) {
             this.sqlFirst.setStringValue(firstSql);
             this.sqlFirst.setStringValue(firstSql);
         }
         }
         return typedThis;
         return typedThis;
@@ -473,7 +474,7 @@ public abstract class AbstractWrapper<T, R, Children extends AbstractWrapper<T,
 
 
     @Override
     @Override
     public String getSqlFirst() {
     public String getSqlFirst() {
-        if (StringUtils.isNotEmpty(sqlFirst.getStringValue())) {
+        if (StringUtils.isNotBlank(sqlFirst.getStringValue())) {
             return StringEscape.escapeRawString(sqlFirst.getStringValue());
             return StringEscape.escapeRawString(sqlFirst.getStringValue());
         }
         }
         return null;
         return null;

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

@@ -96,8 +96,6 @@ public interface Join<Children> extends Serializable {
 
 
     /**
     /**
      * ignore
      * ignore
-     * @param firstSql
-     * @return
      */
      */
     default Children first(String firstSql) {
     default Children first(String firstSql) {
         return first(true, firstSql);
         return first(true, firstSql);
@@ -105,9 +103,10 @@ public interface Join<Children> extends Serializable {
 
 
     /**
     /**
      * sql 起始句(会拼接在SQL语句的起始处)
      * sql 起始句(会拼接在SQL语句的起始处)
+     *
      * @param condition 执行条件
      * @param condition 执行条件
      * @param firstSql  起始语句
      * @param firstSql  起始语句
-     * @return
+     * @return children
      */
      */
     Children first(boolean condition, String firstSql);
     Children first(boolean condition, String firstSql);
 
 

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

@@ -70,7 +70,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 lastSql, SharedString sqlComment) {
+                       SharedString lastSql, SharedString sqlComment, SharedString sqlFirst) {
         this.setEntity(entity);
         this.setEntity(entity);
         this.setEntityClass(entityClass);
         this.setEntityClass(entityClass);
         this.paramNameSeq = paramNameSeq;
         this.paramNameSeq = paramNameSeq;
@@ -79,6 +79,7 @@ public class LambdaQueryWrapper<T> extends AbstractLambdaWrapper<T, LambdaQueryW
         this.sqlSelect = sqlSelect;
         this.sqlSelect = sqlSelect;
         this.lastSql = lastSql;
         this.lastSql = lastSql;
         this.sqlComment = sqlComment;
         this.sqlComment = sqlComment;
+        this.sqlFirst = sqlFirst;
     }
     }
 
 
     /**
     /**
@@ -125,6 +126,6 @@ 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());
+            new MergeSegments(), SharedString.emptyString(), SharedString.emptyString(), SharedString.emptyString());
     }
     }
 }
 }

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

@@ -64,7 +64,7 @@ public class QueryWrapper<T> extends AbstractWrapper<T, String, QueryWrapper<T>>
      */
      */
     private QueryWrapper(T entity, Class<T> entityClass, AtomicInteger paramNameSeq,
     private QueryWrapper(T entity, Class<T> entityClass, AtomicInteger paramNameSeq,
                          Map<String, Object> paramNameValuePairs, MergeSegments mergeSegments,
                          Map<String, Object> paramNameValuePairs, MergeSegments mergeSegments,
-                         SharedString lastSql, SharedString sqlComment) {
+                         SharedString lastSql, SharedString sqlComment, SharedString sqlFirst) {
         this.setEntity(entity);
         this.setEntity(entity);
         this.setEntityClass(entityClass);
         this.setEntityClass(entityClass);
         this.paramNameSeq = paramNameSeq;
         this.paramNameSeq = paramNameSeq;
@@ -72,6 +72,7 @@ public class QueryWrapper<T> extends AbstractWrapper<T, String, QueryWrapper<T>>
         this.expression = mergeSegments;
         this.expression = mergeSegments;
         this.lastSql = lastSql;
         this.lastSql = lastSql;
         this.sqlComment = sqlComment;
         this.sqlComment = sqlComment;
+        this.sqlFirst = sqlFirst;
     }
     }
 
 
     @Override
     @Override
@@ -99,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, expression,
         return new LambdaQueryWrapper<>(getEntity(), getEntityClass(), sqlSelect, paramNameSeq, paramNameValuePairs, expression,
-            lastSql, sqlComment);
+            lastSql, sqlComment, sqlFirst);
     }
     }
 
 
     /**
     /**
@@ -111,6 +112,6 @@ public class QueryWrapper<T> extends AbstractWrapper<T, String, QueryWrapper<T>>
     @Override
     @Override
     protected QueryWrapper<T> instance() {
     protected QueryWrapper<T> instance() {
         return new QueryWrapper<>(getEntity(), getEntityClass(), paramNameSeq, paramNameValuePairs, new MergeSegments(),
         return new QueryWrapper<>(getEntity(), getEntityClass(), paramNameSeq, paramNameValuePairs, new MergeSegments(),
-            SharedString.emptyString(), SharedString.emptyString());
+            SharedString.emptyString(), SharedString.emptyString(), SharedString.emptyString());
     }
     }
 }
 }

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

@@ -74,7 +74,7 @@ public class LambdaUpdateWrapper<T> extends AbstractLambdaWrapper<T, LambdaUpdat
      */
      */
     LambdaUpdateWrapper(T entity, List<String> sqlSet, AtomicInteger paramNameSeq,
     LambdaUpdateWrapper(T entity, List<String> sqlSet, AtomicInteger paramNameSeq,
                         Map<String, Object> paramNameValuePairs, MergeSegments mergeSegments,
                         Map<String, Object> paramNameValuePairs, MergeSegments mergeSegments,
-                        SharedString lastSql, SharedString sqlComment) {
+                        SharedString lastSql, SharedString sqlComment, SharedString sqlFirst) {
         super.setEntity(entity);
         super.setEntity(entity);
         this.sqlSet = sqlSet;
         this.sqlSet = sqlSet;
         this.paramNameSeq = paramNameSeq;
         this.paramNameSeq = paramNameSeq;
@@ -82,6 +82,7 @@ public class LambdaUpdateWrapper<T> extends AbstractLambdaWrapper<T, LambdaUpdat
         this.expression = mergeSegments;
         this.expression = mergeSegments;
         this.lastSql = lastSql;
         this.lastSql = lastSql;
         this.sqlComment = sqlComment;
         this.sqlComment = sqlComment;
+        this.sqlFirst = sqlFirst;
     }
     }
 
 
     @Override
     @Override
@@ -111,6 +112,6 @@ public class LambdaUpdateWrapper<T> extends AbstractLambdaWrapper<T, LambdaUpdat
     @Override
     @Override
     protected LambdaUpdateWrapper<T> instance() {
     protected LambdaUpdateWrapper<T> instance() {
         return new LambdaUpdateWrapper<>(getEntity(), sqlSet, paramNameSeq, paramNameValuePairs, new MergeSegments(),
         return new LambdaUpdateWrapper<>(getEntity(), sqlSet, paramNameSeq, paramNameValuePairs, new MergeSegments(),
-            SharedString.emptyString(), SharedString.emptyString());
+            SharedString.emptyString(), SharedString.emptyString(), SharedString.emptyString());
     }
     }
 }
 }

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

@@ -55,7 +55,7 @@ public class UpdateWrapper<T> extends AbstractWrapper<T, String, UpdateWrapper<T
 
 
     private UpdateWrapper(T entity, List<String> sqlSet, AtomicInteger paramNameSeq,
     private UpdateWrapper(T entity, List<String> sqlSet, AtomicInteger paramNameSeq,
                           Map<String, Object> paramNameValuePairs, MergeSegments mergeSegments,
                           Map<String, Object> paramNameValuePairs, MergeSegments mergeSegments,
-                          SharedString lastSql, SharedString sqlComment) {
+                          SharedString lastSql, SharedString sqlComment, SharedString sqlFirst) {
         this.setEntity(entity);
         this.setEntity(entity);
         this.sqlSet = sqlSet;
         this.sqlSet = sqlSet;
         this.paramNameSeq = paramNameSeq;
         this.paramNameSeq = paramNameSeq;
@@ -63,6 +63,7 @@ public class UpdateWrapper<T> extends AbstractWrapper<T, String, UpdateWrapper<T
         this.expression = mergeSegments;
         this.expression = mergeSegments;
         this.lastSql = lastSql;
         this.lastSql = lastSql;
         this.sqlComment = sqlComment;
         this.sqlComment = sqlComment;
+        this.sqlFirst = sqlFirst;
     }
     }
 
 
     @Override
     @Override
@@ -93,12 +94,13 @@ public class UpdateWrapper<T> extends AbstractWrapper<T, String, UpdateWrapper<T
      * 返回一个支持 lambda 函数写法的 wrapper
      * 返回一个支持 lambda 函数写法的 wrapper
      */
      */
     public LambdaUpdateWrapper<T> lambda() {
     public LambdaUpdateWrapper<T> lambda() {
-        return new LambdaUpdateWrapper<>(getEntity(), sqlSet, paramNameSeq, paramNameValuePairs, expression, lastSql, sqlComment);
+        return new LambdaUpdateWrapper<>(getEntity(), sqlSet, paramNameSeq, paramNameValuePairs, expression,
+            lastSql, sqlComment, sqlFirst);
     }
     }
 
 
     @Override
     @Override
     protected UpdateWrapper<T> instance() {
     protected UpdateWrapper<T> instance() {
         return new UpdateWrapper<>(getEntity(), sqlSet, paramNameSeq, paramNameValuePairs, new MergeSegments(),
         return new UpdateWrapper<>(getEntity(), sqlSet, paramNameSeq, paramNameValuePairs, new MergeSegments(),
-            SharedString.emptyString(), SharedString.emptyString());
+            SharedString.emptyString(), SharedString.emptyString(), SharedString.emptyString());
     }
     }
 }
 }

+ 9 - 15
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/enums/SqlMethod.java

@@ -57,22 +57,16 @@ public enum SqlMethod {
     /**
     /**
      * 查询
      * 查询
      */
      */
-    SELECT_BY_ID("selectById", "根据ID 查询一条数据", " %s SELECT %s FROM %s WHERE %s=#{%s}"),
-    SELECT_BY_MAP("selectByMap", "根据columnMap 查询一条数据", "<script>\n %s SELECT %s FROM %s %s\n</script>"),
-    SELECT_BATCH_BY_IDS("selectBatchIds", "根据ID集合,批量查询数据", "<script>\n %s SELECT %s FROM %s WHERE %s IN (%s)\n</script>"),
-    SELECT_ONE("selectOne", "查询满足条件一条数据", "<script>\n %s SELECT %s FROM %s %s %s\n</script>"),
-    SELECT_COUNT("selectCount", "查询满足条件总记录数", "<script>\n %s SELECT COUNT(%s) FROM %s %s %s\n</script>"),
-    SELECT_LIST("selectList", "查询满足条件所有数据", "<script>\n %s SELECT %s FROM %s %s %s\n</script>"),
-    SELECT_PAGE("selectPage", "查询满足条件所有数据(并翻页)", "<script>\n %s SELECT %s FROM %s %s %s\n</script>"),
-    SELECT_MAPS("selectMaps", "查询满足条件所有数据", "<script>\n %s SELECT %s FROM %s %s %s\n</script>"),
+    SELECT_BY_ID("selectById", "根据ID 查询一条数据", "SELECT %s FROM %s WHERE %s=#{%s} %s"),
+    SELECT_BY_MAP("selectByMap", "根据columnMap 查询一条数据", "<script>SELECT %s FROM %s %s\n</script>"),
+    SELECT_BATCH_BY_IDS("selectBatchIds", "根据ID集合,批量查询数据", "<script>SELECT %s FROM %s WHERE %s IN (%s) %s</script>"),
+    SELECT_ONE("selectOne", "查询满足条件一条数据", "<script>%s SELECT %s FROM %s %s %s\n</script>"),
+    SELECT_COUNT("selectCount", "查询满足条件总记录数", "<script>%s SELECT COUNT(%s) FROM %s %s %s\n</script>"),
+    SELECT_LIST("selectList", "查询满足条件所有数据", "<script>%s SELECT %s FROM %s %s %s\n</script>"),
+    SELECT_PAGE("selectPage", "查询满足条件所有数据(并翻页)", "<script>%s SELECT %s FROM %s %s %s\n</script>"),
+    SELECT_MAPS("selectMaps", "查询满足条件所有数据", "<script>%s SELECT %s FROM %s %s %s\n</script>"),
     SELECT_MAPS_PAGE("selectMapsPage", "查询满足条件所有数据(并翻页)", "<script>\n %s SELECT %s FROM %s %s %s\n</script>"),
     SELECT_MAPS_PAGE("selectMapsPage", "查询满足条件所有数据(并翻页)", "<script>\n %s SELECT %s FROM %s %s %s\n</script>"),
-    SELECT_OBJS("selectObjs", "查询满足条件所有数据", "<script>\n %s SELECT %s FROM %s %s %s\n</script>"),
-
-    /**
-     * 逻辑删除 -> 查询
-     */
-    LOGIC_SELECT_BY_ID("selectById", "根据ID 查询一条数据", " %s SELECT %s FROM %s WHERE %s=#{%s} %s"),
-    LOGIC_SELECT_BATCH_BY_IDS("selectBatchIds", "根据ID集合,批量查询数据", "<script>\n %s SELECT %s FROM %s WHERE %s IN (%s) %s\n</script>");
+    SELECT_OBJS("selectObjs", "查询满足条件所有数据", "<script>%s SELECT %s FROM %s %s %s\n</script>");
 
 
     private final String method;
     private final String method;
     private final String desc;
     private final String desc;

+ 3 - 8
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/AbstractMethod.java

@@ -124,15 +124,10 @@ public abstract class AbstractMethod implements Constants {
      * @return sql
      * @return sql
      */
      */
     protected String sqlFirst() {
     protected String sqlFirst() {
-        return SqlScriptUtils.convertChoose(
-                String.format(
-                        "%s != null and %s != null",
-                        WRAPPER,
-                        Q_WRAPPER_SQL_FIRST
-                ),
-                SqlScriptUtils.unSafeParam(Q_WRAPPER_SQL_FIRST),
-                EMPTY);
+        return SqlScriptUtils.convertChoose(String.format("%s != null and %s != null", WRAPPER, Q_WRAPPER_SQL_FIRST),
+            SqlScriptUtils.unSafeParam(Q_WRAPPER_SQL_FIRST), EMPTY);
     }
     }
+
     /**
     /**
      * SQL 查询所有表字段
      * SQL 查询所有表字段
      *
      *

+ 6 - 17
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/SelectBatchByIds.java

@@ -32,22 +32,11 @@ public class SelectBatchByIds extends AbstractMethod {
 
 
     @Override
     @Override
     public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
     public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
-        SqlMethod sqlMethod = SqlMethod.LOGIC_SELECT_BATCH_BY_IDS;
-        SqlSource sqlSource = languageDriver.createSqlSource(configuration,
-                String.format(
-                        sqlMethod.getSql(),
-                        sqlFirst(),
-                        sqlSelectColumns(tableInfo, false),
-                        tableInfo.getTableName(),
-                        tableInfo.getKeyColumn(),
-                        SqlScriptUtils.convertForeach(
-                                "#{item}",
-                                COLLECTION,
-                                null,
-                                "item",
-                                COMMA
-                        ),
-                        tableInfo.getLogicDeleteSql(true, false)), Object.class);
-        return addSelectMappedStatementForTable(mapperClass, sqlMethod.getMethod(), sqlSource, tableInfo);
+        SqlMethod sqlMethod = SqlMethod.SELECT_BATCH_BY_IDS;
+        SqlSource sqlSource = languageDriver.createSqlSource(configuration, String.format(sqlMethod.getSql(),
+            sqlSelectColumns(tableInfo, false), tableInfo.getTableName(), tableInfo.getKeyColumn(),
+            SqlScriptUtils.convertForeach("#{item}", COLLECTION, null, "item", COMMA),
+            tableInfo.getLogicDeleteSql(true, true)), Object.class);
+        return addSelectMappedStatementForTable(mapperClass, getMethod(sqlMethod), sqlSource, tableInfo);
     }
     }
 }
 }

+ 5 - 12
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/SelectById.java

@@ -32,18 +32,11 @@ public class SelectById extends AbstractMethod {
 
 
     @Override
     @Override
     public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
     public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
-        SqlMethod sqlMethod = SqlMethod.LOGIC_SELECT_BY_ID;
-        SqlSource sqlSource = new RawSqlSource(configuration,
-                String.format(
-                        sqlMethod.getSql(),
-                        sqlFirst(),
-                        sqlSelectColumns(tableInfo, false),
-                        tableInfo.getTableName(),
-                        tableInfo.getKeyColumn(),
-                        tableInfo.getKeyProperty(),
-                        tableInfo.getLogicDeleteSql(true, false)
-                ),
-                Object.class);
+        SqlMethod sqlMethod = SqlMethod.SELECT_BY_ID;
+        SqlSource sqlSource = new RawSqlSource(configuration, String.format(sqlMethod.getSql(),
+            sqlSelectColumns(tableInfo, false),
+            tableInfo.getTableName(), tableInfo.getKeyColumn(), tableInfo.getKeyProperty(),
+            tableInfo.getLogicDeleteSql(true, false)), Object.class);
         return this.addSelectMappedStatementForTable(mapperClass, sqlMethod.getMethod(), sqlSource, tableInfo);
         return this.addSelectMappedStatementForTable(mapperClass, sqlMethod.getMethod(), sqlSource, tableInfo);
     }
     }
 }
 }

+ 2 - 5
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/methods/SelectByMap.java

@@ -34,11 +34,8 @@ public class SelectByMap extends AbstractMethod {
     @Override
     @Override
     public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
     public MappedStatement injectMappedStatement(Class<?> mapperClass, Class<?> modelClass, TableInfo tableInfo) {
         SqlMethod sqlMethod = SqlMethod.SELECT_BY_MAP;
         SqlMethod sqlMethod = SqlMethod.SELECT_BY_MAP;
-        String sql = String.format(
-                sqlMethod.getSql(),
-                sqlFirst(),
-                sqlSelectColumns(tableInfo, false),
-                tableInfo.getTableName(), sqlWhereByMap(tableInfo));
+        String sql = String.format(sqlMethod.getSql(), sqlSelectColumns(tableInfo, false),
+            tableInfo.getTableName(), sqlWhereByMap(tableInfo));
         SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, Map.class);
         SqlSource sqlSource = languageDriver.createSqlSource(configuration, sql, Map.class);
         return this.addSelectMappedStatementForTable(mapperClass, getMethod(sqlMethod), sqlSource, tableInfo);
         return this.addSelectMappedStatementForTable(mapperClass, getMethod(sqlMethod), sqlSource, tableInfo);
     }
     }

+ 2 - 0
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/conditions/AbstractChainWrapper.java

@@ -241,10 +241,12 @@ public abstract class AbstractChainWrapper<T, R, Children extends AbstractChainW
         return typedThis;
         return typedThis;
     }
     }
 
 
+    @Override
     public Children first(boolean condition, String firstSql) {
     public Children first(boolean condition, String firstSql) {
         getWrapper().first(condition, firstSql);
         getWrapper().first(condition, firstSql);
         return typedThis;
         return typedThis;
     }
     }
+
     @Override
     @Override
     public Children exists(boolean condition, String existsSql) {
     public Children exists(boolean condition, String existsSql) {
         getWrapper().exists(condition, existsSql);
         getWrapper().exists(condition, existsSql);