24282 пре 1 година
родитељ
комит
ce1fb71a2c

+ 1 - 1
my-test/src/main/java/org/example/join/JoinConfig.java

@@ -13,7 +13,7 @@ public class JoinConfig {
     private SqlSessionFactory sqlSessionFactory;
 
     @Bean
-    public JoinMapper testMapper() throws Exception {
+    public JoinMapper joinMapper() throws Exception {
         MapperFactoryBean<JoinMapper> mapperFactoryBean = new MapperFactoryBean<>();
         mapperFactoryBean.setSqlSessionFactory(sqlSessionFactory);
         mapperFactoryBean.setMapperInterface(JoinMapper.class);

+ 0 - 12
my-test/src/main/java/org/example/join/sql/Join.java

@@ -1,12 +1,9 @@
 package org.example.join.sql;
 
 import cn.hutool.core.util.ObjectUtil;
-import org.example.join.domain.QueryColumn;
 import org.example.join.domain.QueryCondition;
 import org.example.join.domain.Table;
 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;
@@ -36,15 +33,6 @@ public class Join<R> {
             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);
         sql.queryTableList.add(tableJoin);
 

+ 42 - 0
my-test/src/main/java/org/example/join/sql/JoinSqlProvider.java

@@ -13,6 +13,7 @@ import org.example.join.domain.QueryConditionOrder;
 import org.example.join.domain.Table;
 import org.example.join.domain.TableJoin;
 import org.example.join.util.SqlConstant;
+import org.example.join.util.SqlUtil;
 
 import java.util.List;
 import java.util.Map;
@@ -23,13 +24,54 @@ public class JoinSqlProvider {
     public static String getSql(Map<String, Object> paramMap) {
         Sql<?> sql = (Sql<?>) paramMap.get(ISqlRunner.SQL);
         try {
+
+            // 初始化sql上下文
             SqlContext.init(sql, paramMap);
+
+            // 拼接逻辑删除
+            spliceLogic(sql);
+
+            // 创建sql字符串
             return createSql(sql);
+
         } finally {
             SqlContext.remove();
         }
     }
 
+    /**
+     * 拼接逻辑删除
+     */
+    private static void spliceLogic(Sql<?> sql) {
+        if (sql.logic == null) {
+            return;
+        }
+
+        List<ITable> queryTableList = sql.queryTableList;
+        for (int i = queryTableList.size() - 1; i >= 0; i--) {
+            ITable iTable = queryTableList.get(i);
+            if (iTable instanceof Table table) {
+                String tableDelFlag = SqlUtil.getTableDelFlag(table);
+                if (ObjectUtil.isNotEmpty(tableDelFlag)) {
+                    QueryColumn queryColumn = new QueryColumn(table, tableDelFlag);
+                    sql.queryConditionList.add(0, new QueryCondition(queryColumn, SqlConstant.EQ, sql.logic ? 1 : 0));
+                }
+            } else if (iTable instanceof TableJoin tableJoin) {
+                Table table = tableJoin.getTable();
+                String tableDelFlag = SqlUtil.getTableDelFlag(table);
+                if (ObjectUtil.isNotEmpty(tableDelFlag)) {
+                    QueryColumn queryColumn = new QueryColumn(table, tableDelFlag);
+                    tableJoin.getQueryConditionList().add(new QueryCondition(queryColumn, SqlConstant.EQ, sql.logic ? 1 : 0));
+                }
+            } else {
+                throw new IllegalArgumentException("未知ITable类型");
+            }
+        }
+    }
+
+    /**
+     * 创建sql字符串
+     */
     private static String createSql(Sql<?> sql) {
 
         List<IQueryColumn> queryFieldsList = sql.queryFieldsList;

+ 9 - 17
my-test/src/main/java/org/example/join/sql/Select.java

@@ -2,11 +2,7 @@ package org.example.join.sql;
 
 import cn.hutool.core.util.ObjectUtil;
 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.util.SqlConstant;
-import org.example.join.util.SqlUtil;
 
 import java.util.Arrays;
 import java.util.List;
@@ -32,7 +28,15 @@ public class Select<R> {
      * 忽略查询逻辑删除
      */
     public Select<R> logicIgnore() {
-        sql.logic = false;
+        sql.logic = null;
+        return this;
+    }
+
+    /**
+     * 查询已逻辑删除数据
+     */
+    public Select<R> logic() {
+        sql.logic = true;
         return this;
     }
 
@@ -53,18 +57,6 @@ public class Select<R> {
 
     public From<R> from(Table... tables) {
         sql.queryTableList.addAll(Arrays.asList(tables));
-
-        // 拼接逻辑删除
-        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);
     }
 

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

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

+ 3 - 2
my-test/src/main/java/org/example/join/sql/SqlContext.java

@@ -5,6 +5,7 @@ import cn.hutool.core.util.StrUtil;
 import org.example.join.domain.ITable;
 import org.example.join.domain.Table;
 import org.example.join.domain.TableJoin;
+import org.example.join.util.SqlConstant;
 
 import java.util.HashMap;
 import java.util.List;
@@ -29,11 +30,11 @@ public class SqlContext {
         threadLocal.remove();
     }
 
-    public static int getParamNumber() {
+    public static String getParamKey() {
         Map<String, Object> map = threadLocal.get();
         int paramNumber = (int) map.get(PARAM_NUMBER);
         map.put(PARAM_NUMBER, paramNumber + 1);
-        return paramNumber;
+        return SqlConstant.SQL_PARAM + paramNumber;
     }
 
     public static Map<String, Object> getParamMap() {

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

@@ -23,7 +23,7 @@ public class SqlUtil {
     }
 
     public static void putParam(StringJoiner joiner, Object value) {
-        String mapKey = SqlConstant.SQL_PARAM + SqlContext.getParamNumber();
+        String mapKey = SqlContext.getParamKey();
         joiner.add(StringPool.HASH_LEFT_BRACE + mapKey + StringPool.RIGHT_BRACE);
         SqlContext.getParamMap().put(mapKey, value);
     }

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

@@ -40,7 +40,7 @@ public class MySpringBootTest {
     public void testCache() {
 
         List<SysDept> list = Sql.create(SysDept.class)
-                //.logicIgnore()
+                //.logic()
                 .select(
                         //dept_id,
                         //abs(parent_id).as(SysDept::getUpdateTime),
@@ -56,6 +56,7 @@ public class MySpringBootTest {
                 .from(sys_dept)
                 .leftJoin(sys_user).on(user_id.eq(dept_id))
                 .where(
+                        create_by.eq(777),
                         create_by.ne(concat("777", "555").add(777)).and(concat("777", "555").eq("sss"))
                         //create_by.gt(98),
                         //create_by.lt(98),