24282 1 year ago
parent
commit
504ecfd1c2

+ 14 - 1
my-test/src/main/java/org/example/join/sql/Join.java

@@ -5,7 +5,10 @@ import org.example.join.domain.QueryColumn;
 import org.example.join.domain.QueryCondition;
 import org.example.join.domain.QueryCondition;
 import org.example.join.domain.Table;
 import org.example.join.domain.Table;
 import org.example.join.domain.TableJoin;
 import org.example.join.domain.TableJoin;
+import org.example.join.util.SqlConstant;
+import org.example.join.util.SqlUtil;
 
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Arrays;
 import java.util.List;
 import java.util.List;
 import java.util.Objects;
 import java.util.Objects;
@@ -35,14 +38,24 @@ public class Join<R> {
             throw new IllegalArgumentException("on不能为空");
             throw new IllegalArgumentException("on不能为空");
         }
         }
 
 
-        List<QueryCondition> queryConditionList = Arrays.stream(queryConditions).filter(Objects::nonNull).toList();
+        List<QueryCondition> queryConditionList = new ArrayList<>(Arrays.stream(queryConditions).filter(Objects::nonNull).toList());
 
 
         if (queryConditionList.isEmpty()) {
         if (queryConditionList.isEmpty()) {
             throw new IllegalArgumentException("on不能为空");
             throw new IllegalArgumentException("on不能为空");
         }
         }
 
 
+        // 拼接逻辑删除
+        if (sql.logic) {
+            String tableDelFlag = SqlUtil.getTableDelFlag(table);
+            if (ObjectUtil.isNotEmpty(tableDelFlag)) {
+                QueryColumn queryColumn = new QueryColumn(table, tableDelFlag);
+                queryConditionList.add(new QueryCondition(queryColumn, SqlConstant.EQ, 0));
+            }
+        }
+
         TableJoin tableJoin = new TableJoin(join, table, queryConditionList);
         TableJoin tableJoin = new TableJoin(join, table, queryConditionList);
         sql.queryTableList.add(tableJoin);
         sql.queryTableList.add(tableJoin);
+
         return new From<>(sql);
         return new From<>(sql);
     }
     }
 
 

+ 27 - 0
my-test/src/main/java/org/example/join/sql/Select.java

@@ -2,7 +2,11 @@ package org.example.join.sql;
 
 
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.ObjectUtil;
 import org.example.join.domain.IQueryColumn;
 import org.example.join.domain.IQueryColumn;
+import org.example.join.domain.QueryColumn;
+import org.example.join.domain.QueryCondition;
 import org.example.join.domain.Table;
 import org.example.join.domain.Table;
+import org.example.join.util.SqlConstant;
+import org.example.join.util.SqlUtil;
 
 
 import java.util.Arrays;
 import java.util.Arrays;
 import java.util.List;
 import java.util.List;
@@ -16,11 +20,22 @@ public class Select<R> {
         this.sql = sql;
         this.sql = sql;
     }
     }
 
 
+    /**
+     * 去重
+     */
     public Select<R> distinct() {
     public Select<R> distinct() {
         sql.distinct = true;
         sql.distinct = true;
         return this;
         return this;
     }
     }
 
 
+    /**
+     * 忽略查询逻辑删除
+     */
+    public Select<R> logicIgnore() {
+        sql.logic = false;
+        return this;
+    }
+
     public Select<R> select(IQueryColumn... columns) {
     public Select<R> select(IQueryColumn... columns) {
 
 
         if (ObjectUtil.isEmpty(columns)) {
         if (ObjectUtil.isEmpty(columns)) {
@@ -38,6 +53,18 @@ public class Select<R> {
 
 
     public From<R> from(Table... tables) {
     public From<R> from(Table... tables) {
         sql.queryTableList.addAll(Arrays.stream(tables).peek(sql::putTableAliasMap).toList());
         sql.queryTableList.addAll(Arrays.stream(tables).peek(sql::putTableAliasMap).toList());
+
+        // 拼接逻辑删除
+        if (sql.logic) {
+            for (Table table : tables) {
+                String tableDelFlag = SqlUtil.getTableDelFlag(table);
+                if (ObjectUtil.isNotEmpty(tableDelFlag)) {
+                    QueryColumn queryColumn = new QueryColumn(table, tableDelFlag);
+                    sql.queryConditionList.add(new QueryCondition(queryColumn, SqlConstant.EQ, 0));
+                }
+            }
+        }
+
         return new From<>(sql);
         return new From<>(sql);
     }
     }
 
 

+ 1 - 0
my-test/src/main/java/org/example/join/sql/Sql.java

@@ -24,6 +24,7 @@ public class Sql<R> {
     protected final List<QueryConditionOrder> orderByList = new ArrayList<>();
     protected final List<QueryConditionOrder> orderByList = new ArrayList<>();
 
 
     protected Boolean distinct = false;
     protected Boolean distinct = false;
+    protected Boolean logic = true;
 
 
     protected Sql(Class<R> resultCls) {
     protected Sql(Class<R> resultCls) {
         this.resultCls = resultCls;
         this.resultCls = resultCls;

+ 19 - 0
my-test/src/main/java/org/example/join/util/SqlUtil.java

@@ -1,12 +1,19 @@
 package org.example.join.util;
 package org.example.join.util;
 
 
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
+import com.baomidou.mybatisplus.core.metadata.TableInfo;
+import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
+import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import org.example.join.domain.Table;
 import org.example.join.domain.Table;
 
 
 import java.util.Map;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 
 public class SqlUtil {
 public class SqlUtil {
 
 
+    private static final Map<String, String> delFlagMap = new ConcurrentHashMap<>();
+
     public static String getTableAlias(Table table, Map<String, String> tableAliasMap) {
     public static String getTableAlias(Table table, Map<String, String> tableAliasMap) {
         String tableAlias = table.getAlias();
         String tableAlias = table.getAlias();
         String tableName = table.getName();
         String tableName = table.getName();
@@ -20,4 +27,16 @@ public class SqlUtil {
         return tableAlias;
         return tableAlias;
     }
     }
 
 
+    public static String getTableDelFlag(Table table) {
+        return delFlagMap.computeIfAbsent(table.getName(), item -> {
+            TableInfo tableInfo = TableInfoHelper.getTableInfo(item);
+            for (TableFieldInfo tableFieldInfo : tableInfo.getFieldList()) {
+                if (tableFieldInfo.isLogicDelete()) {
+                    return tableFieldInfo.getColumn();
+                }
+            }
+            return StringPool.EMPTY;
+        });
+    }
+
 }
 }

+ 1 - 0
my-test/src/test/java/MySpringBootTest.java

@@ -38,6 +38,7 @@ public class MySpringBootTest {
     public void testCache() {
     public void testCache() {
 
 
         List<SysDept> list = Sql.create(SysDept.class)
         List<SysDept> list = Sql.create(SysDept.class)
+                .logicIgnore()
                 .select(
                 .select(
                         dept_id,
                         dept_id,
                         tenant_id
                         tenant_id