column, boolean onlyColumn) {
- TableInfo info = TableInfoHelper.getTableInfo(MyLambdaUtils.getEntityClass(column));
- Assert.notNull(info, "can not find table for lambda");
- return info.getTableName() + StringPool.DOT + getColumn(LambdaUtils.resolve(column), onlyColumn);
+ return Constant.TABLE_ALIAS + getDefault(subTable.get(MyLambdaUtils.getEntityClass(column))) + StringPool.DOT +
+ MyLambdaUtils.getColumn(column);
}
-
- /**
- * 获取 SerializedLambda 对应的列信息,从 lambda 表达式中推测实体类
- *
- * 如果获取不到列信息,那么本次条件组装将会失败
- *
- * @param lambda lambda 表达式
- * @param onlyColumn 如果是,结果: "name", 如果否: "name" as "name"
- * @return 列
- * @throws com.baomidou.mybatisplus.core.exceptions.MybatisPlusException 获取不到列信息时抛出异常
- * @see SerializedLambda#getImplClass()
- * @see SerializedLambda#getImplMethodName()
- */
- private String getColumn(SerializedLambda lambda, boolean onlyColumn) {
- Class> aClass = lambda.getInstantiatedType();
- tryInitCache(aClass);
- String fieldName = PropertyNamer.methodToProperty(lambda.getImplMethodName());
- ColumnCache columnCache = getColumnCache(fieldName, aClass);
- return onlyColumn ? columnCache.getColumn() : columnCache.getColumnSelect();
+ protected String getDefault(Integer i) {
+ if (Objects.nonNull(i)) {
+ return i.toString();
+ }
+ return StringPool.SPACE;
}
- private void tryInitCache(Class> lambdaClass) {
- if (!initColumnMap) {
- final Class entityClass = getEntityClass();
- if (entityClass != null) {
- lambdaClass = entityClass;
- }
- columnMap = LambdaUtils.getColumnMap(lambdaClass);
- initColumnMap = true;
- }
- Assert.notNull(columnMap, "can not find lambda cache for this entity [%s]", lambdaClass.getName());
- }
-
- private ColumnCache getColumnCache(String fieldName, Class> lambdaClass) {
- ColumnCache columnCache = columnMap.get(LambdaUtils.formatKey(fieldName));
- if (Objects.isNull(columnCache)) {
- columnCache = new ColumnCache(fieldName, null);
- }
- return columnCache;
- }
-
- public static class SubClass {
-
- private String tableAlias;
-
- private SFunction left;
-
- private SFunction right;
-
-
- public SubClass(String tableAlias, SFunction left, SFunction right) {
- this.tableAlias = tableAlias;
- this.left = left;
- this.right = right;
- }
-
- public String getTableAlias() {
- return tableAlias;
- }
-
- public void setTableAlias(String tableAlias) {
- this.tableAlias = tableAlias;
- }
-
- public SFunction getLeft() {
- return left;
- }
-
- public void setLeft(SFunction left) {
- this.left = left;
- }
-
- public SFunction getRight() {
- return right;
- }
-
- public void setRight(SFunction right) {
- this.right = right;
- }
- }
}
diff --git a/src/main/java/com/github/yulichang/wrapper/MyJoinLambdaQueryWrapper.java b/src/main/java/com/github/yulichang/wrapper/MyJoinLambdaQueryWrapper.java
index db6f3e0..6325410 100644
--- a/src/main/java/com/github/yulichang/wrapper/MyJoinLambdaQueryWrapper.java
+++ b/src/main/java/com/github/yulichang/wrapper/MyJoinLambdaQueryWrapper.java
@@ -15,9 +15,7 @@ import com.github.yulichang.toolkit.MyLambdaUtils;
import com.github.yulichang.wrapper.interfaces.MyLambdaJoin;
import com.github.yulichang.wrapper.interfaces.MySFunctionQuery;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Predicate;
import java.util.stream.Collectors;
@@ -42,13 +40,17 @@ public class MyJoinLambdaQueryWrapper extends MyAbstractLambdaWrapper selectColumns = new ArrayList<>();
+ /**
+ * 表序号
+ */
+ private int tableIndex = 1;
/**
* 不建议直接 new 该实例,使用 Wrappers.lambdaQuery(entity)
@@ -99,9 +101,7 @@ public class MyJoinLambdaQueryWrapper extends MyAbstractLambdaWrapper MyJoinLambdaQueryWrapper select(SFunction... columns) {
if (ArrayUtils.isNotEmpty(columns)) {
for (SFunction s : columns) {
- Class clazz = MyLambdaUtils.getEntityClass(s);
- TableInfo info = TableInfoHelper.getTableInfo(clazz);
- selectColumns.add(new SelectColumn(clazz, info.getTableName(), MyLambdaUtils.getColumn(s), null));
+ selectColumns.add(new SelectColumn(MyLambdaUtils.getEntityClass(s), MyLambdaUtils.getColumn(s), null));
}
}
return typedThis;
@@ -112,25 +112,24 @@ public class MyJoinLambdaQueryWrapper extends MyAbstractLambdaWrapper selectColumns.add(new SelectColumn(entityClass, info.getTableName(), i.getColumn(), null)));
+ i -> selectColumns.add(new SelectColumn(entityClass, i.getColumn(), null)));
return typedThis;
}
public final MyJoinLambdaQueryWrapper selectAs(SFunction columns, SFunction alias) {
- Class clazz = MyLambdaUtils.getEntityClass(columns);
- TableInfo info = TableInfoHelper.getTableInfo(clazz);
- Assert.notNull(info, "table can not be find for lambda");
- selectColumns.add(new SelectColumn(clazz, info.getTableName(), MyLambdaUtils.getColumn(columns), MyLambdaUtils.getName(alias)));
+ selectColumns.add(new SelectColumn(MyLambdaUtils.getEntityClass(columns), MyLambdaUtils.getColumn(columns), MyLambdaUtils.getName(alias)));
return typedThis;
}
public final MyJoinLambdaQueryWrapper selectAll(Class> clazz) {
TableInfo info = TableInfoHelper.getTableInfo(clazz);
Assert.notNull(info, "table can not be find -> %s", clazz);
- selectColumns.add(new SelectColumn(clazz, info.getTableName(), info.getKeyColumn(), null));
+ if (info.havePK()) {
+ selectColumns.add(new SelectColumn(clazz, info.getKeyColumn(), null));
+ }
info.getFieldList().forEach(c ->
- selectColumns.add(new SelectColumn(clazz, info.getTableName(), c.getColumn(), null)));
+ selectColumns.add(new SelectColumn(clazz, c.getColumn(), null)));
return typedThis;
}
@@ -138,7 +137,7 @@ public class MyJoinLambdaQueryWrapper extends MyAbstractLambdaWrapper
- i.getTableName() + StringPool.DOT + i.getColumnName() +
+ Constant.TABLE_ALIAS + getDefault(subTable.get(i.getClazz())) + StringPool.DOT + i.getColumnName() +
(StringUtils.isBlank(i.getAlias()) ? StringPool.EMPTY : (Constant.AS + i.getAlias())))
.collect(Collectors.joining(StringPool.COMMA));
sqlSelect.setStringValue(s);
@@ -174,22 +173,37 @@ public class MyJoinLambdaQueryWrapper extends MyAbstractLambdaWrapper MyJoinLambdaQueryWrapper join(String keyWord, boolean condition, Class clazz, SFunction left, SFunction right) {
if (condition) {
+ subTable.put(clazz, tableIndex);
TableInfo leftInfo = TableInfoHelper.getTableInfo(clazz);
- TableInfo rightInfo = TableInfoHelper.getTableInfo(MyLambdaUtils.getEntityClass(right));
- String s = keyWord + leftInfo.getTableName() + Constant.ON + leftInfo.getTableName() + StringPool.DOT
- + MyLambdaUtils.getColumn(left) + Constant.EQUALS + rightInfo.getTableName() + StringPool.DOT
- + MyLambdaUtils.getColumn(right);
+ StringBuilder sb = new StringBuilder(keyWord)
+ .append(leftInfo.getTableName())
+ .append(StringPool.SPACE)
+ .append(Constant.TABLE_ALIAS)
+ .append(tableIndex)
+ .append(StringPool.SPACE)
+ .append(Constant.ON)
+ .append(Constant.TABLE_ALIAS)
+ .append(tableIndex)
+ .append(StringPool.DOT)
+ .append(MyLambdaUtils.getColumn(left))
+ .append(Constant.EQUALS)
+ .append(Constant.TABLE_ALIAS)
+ .append(getDefault(subTable.get(MyLambdaUtils.getEntityClass(right))))
+ .append(StringPool.DOT)
+ .append(MyLambdaUtils.getColumn(right));
+ tableIndex++;
if (StringUtils.isBlank(from.getStringValue())) {
- from.setStringValue(s);
+ from.setStringValue(sb.toString());
} else {
- from.setStringValue(from.getStringValue() + s);
+ from.setStringValue(from.getStringValue() + sb.toString());
}
}
return typedThis;
}
+
/**
* select字段
*/
@@ -197,15 +211,12 @@ public class MyJoinLambdaQueryWrapper extends MyAbstractLambdaWrapper clazz;
- private String tableName;
-
private String columnName;
private String alias;
- public SelectColumn(Class> clazz, String tableName, String columnName, String alias) {
+ public SelectColumn(Class> clazz, String columnName, String alias) {
this.clazz = clazz;
- this.tableName = tableName;
this.columnName = columnName;
this.alias = alias;
}
@@ -218,14 +229,6 @@ public class MyJoinLambdaQueryWrapper extends MyAbstractLambdaWrapper