mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-07 00:58:24 +08:00
fix: fixed and close #I7QD29
This commit is contained in:
parent
4998646191
commit
712b0e73c8
@ -16,7 +16,8 @@
|
||||
package com.mybatisflex.core.logicdelete;
|
||||
|
||||
import com.mybatisflex.core.dialect.IDialect;
|
||||
import com.mybatisflex.core.query.QueryCondition;
|
||||
import com.mybatisflex.core.query.QueryColumn;
|
||||
import com.mybatisflex.core.query.QueryTable;
|
||||
import com.mybatisflex.core.query.QueryWrapper;
|
||||
import com.mybatisflex.core.table.TableInfo;
|
||||
|
||||
@ -41,10 +42,10 @@ public abstract class AbstractLogicDeleteProcessor implements LogicDeleteProcess
|
||||
}
|
||||
|
||||
@Override
|
||||
public void buildQueryCondition(QueryWrapper queryWrapper, TableInfo tableInfo) {
|
||||
queryWrapper.and(QueryCondition.create(tableInfo.getSchema(), tableInfo.getTableName(), tableInfo.getLogicDeleteColumn()
|
||||
, EQUALS
|
||||
, getLogicNormalValue()));
|
||||
public void buildQueryCondition(QueryWrapper queryWrapper, TableInfo tableInfo, String joinTableAlias) {
|
||||
QueryTable queryTable = new QueryTable(tableInfo.getSchema(), tableInfo.getTableName()).as(joinTableAlias);
|
||||
QueryColumn queryColumn = new QueryColumn(queryTable, tableInfo.getLogicDeleteColumn());
|
||||
queryWrapper.and(queryColumn.eq(getLogicNormalValue()));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -44,11 +44,11 @@ public interface LogicDeleteProcessor {
|
||||
|
||||
/**
|
||||
* 用于构建通过 {@link QueryWrapper} 查询数据时的内容。
|
||||
*
|
||||
* @param queryWrapper 条件构造器
|
||||
* @param queryWrapper 条件构造器
|
||||
* @param tableInfo 表信息
|
||||
* @param joinTableAlias join table 的别名
|
||||
*/
|
||||
void buildQueryCondition(QueryWrapper queryWrapper, TableInfo tableInfo);
|
||||
void buildQueryCondition(QueryWrapper queryWrapper, TableInfo tableInfo, String joinTableAlias);
|
||||
|
||||
/**
|
||||
* 获取逻辑删除列未删除标记值。
|
||||
|
||||
@ -18,6 +18,7 @@ package com.mybatisflex.core.logicdelete;
|
||||
|
||||
import com.mybatisflex.core.dialect.IDialect;
|
||||
import com.mybatisflex.core.query.QueryColumn;
|
||||
import com.mybatisflex.core.query.QueryTable;
|
||||
import com.mybatisflex.core.query.QueryWrapper;
|
||||
import com.mybatisflex.core.table.TableInfo;
|
||||
|
||||
@ -35,8 +36,9 @@ public abstract class NullableColumnLogicDeleteProcessor extends AbstractLogicDe
|
||||
}
|
||||
|
||||
@Override
|
||||
public void buildQueryCondition(QueryWrapper queryWrapper, TableInfo tableInfo) {
|
||||
QueryColumn queryColumn = new QueryColumn(tableInfo.getSchema(), tableInfo.getTableName(), tableInfo.getLogicDeleteColumn());
|
||||
public void buildQueryCondition(QueryWrapper queryWrapper, TableInfo tableInfo, String joinTableAlias) {
|
||||
QueryTable queryTable = new QueryTable(tableInfo.getSchema(), tableInfo.getTableName()).as(joinTableAlias);
|
||||
QueryColumn queryColumn = new QueryColumn(queryTable, tableInfo.getLogicDeleteColumn());
|
||||
queryWrapper.and(queryColumn.isNull());
|
||||
}
|
||||
|
||||
|
||||
@ -18,8 +18,6 @@ package com.mybatisflex.core.logicdelete.impl;
|
||||
import com.mybatisflex.core.FlexGlobalConfig;
|
||||
import com.mybatisflex.core.dialect.IDialect;
|
||||
import com.mybatisflex.core.logicdelete.AbstractLogicDeleteProcessor;
|
||||
import com.mybatisflex.core.query.QueryCondition;
|
||||
import com.mybatisflex.core.query.QueryWrapper;
|
||||
import com.mybatisflex.core.table.TableInfo;
|
||||
|
||||
import static com.mybatisflex.core.constant.SqlConsts.EQUALS;
|
||||
@ -27,6 +25,7 @@ import static com.mybatisflex.core.constant.SqlConsts.SINGLE_QUOTE;
|
||||
|
||||
/**
|
||||
* 默认逻辑删除处理器。
|
||||
* @author michael
|
||||
*/
|
||||
public class DefaultLogicDeleteProcessor extends AbstractLogicDeleteProcessor {
|
||||
|
||||
@ -40,13 +39,6 @@ public class DefaultLogicDeleteProcessor extends AbstractLogicDeleteProcessor {
|
||||
return dialect.wrap(logicColumn) + EQUALS + prepareValue(getLogicDeletedValue());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void buildQueryCondition(QueryWrapper queryWrapper, TableInfo tableInfo) {
|
||||
queryWrapper.where(QueryCondition.create(tableInfo.getSchema(), tableInfo.getTableName(), tableInfo.getLogicDeleteColumn()
|
||||
, EQUALS
|
||||
, getLogicNormalValue()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getLogicNormalValue() {
|
||||
return FlexGlobalConfig.getDefaultConfig().getNormalValueOfLogicDelete();
|
||||
|
||||
@ -80,6 +80,14 @@ public class QueryTable implements CloneSupport<QueryTable> {
|
||||
return StringUtil.isNotBlank(schema) ? schema + "." + name : name;
|
||||
}
|
||||
|
||||
public String getAlias() {
|
||||
return alias;
|
||||
}
|
||||
|
||||
public void setAlias(String alias) {
|
||||
this.alias = alias;
|
||||
}
|
||||
|
||||
public QueryTable as(String alias) {
|
||||
this.alias = alias;
|
||||
return this;
|
||||
|
||||
@ -779,7 +779,8 @@ public class TableInfo {
|
||||
|
||||
//逻辑删除
|
||||
if (StringUtil.isNotBlank(getLogicDeleteColumnOrSkip())) {
|
||||
LogicDeleteManager.getProcessor().buildQueryCondition(queryWrapper, this);
|
||||
String joinTableAlias = CPI.getContext(queryWrapper, "joinTableAlias");
|
||||
LogicDeleteManager.getProcessor().buildQueryCondition(queryWrapper, this, joinTableAlias);
|
||||
}
|
||||
|
||||
//多租户
|
||||
@ -800,11 +801,14 @@ public class TableInfo {
|
||||
if (CollectionUtil.isNotEmpty(joins)) {
|
||||
for (Join join : joins) {
|
||||
QueryTable joinQueryTable = CPI.getJoinQueryTable(join);
|
||||
|
||||
//join select
|
||||
if (joinQueryTable instanceof SelectQueryTable) {
|
||||
QueryWrapper childQuery = ((SelectQueryTable) joinQueryTable).getQueryWrapper();
|
||||
doAppendConditions(entity, childQuery);
|
||||
} else {
|
||||
|
||||
}
|
||||
//join table
|
||||
else {
|
||||
String nameWithSchema = joinQueryTable.getNameWithSchema();
|
||||
if (StringUtil.isNotBlank(nameWithSchema)) {
|
||||
TableInfo tableInfo = TableInfoFactory.ofTableName(nameWithSchema);
|
||||
@ -812,8 +816,10 @@ public class TableInfo {
|
||||
QueryCondition joinQueryCondition = CPI.getJoinQueryCondition(join);
|
||||
QueryWrapper newWrapper = QueryWrapper.create()
|
||||
.where(joinQueryCondition);
|
||||
CPI.putContext(newWrapper, "joinTableAlias", joinQueryTable.getAlias());
|
||||
tableInfo.appendConditions(entity, newWrapper);
|
||||
CPI.setJoinQueryCondition(join, CPI.getWhereQueryCondition(newWrapper));
|
||||
QueryCondition whereQueryCondition = CPI.getWhereQueryCondition(newWrapper);
|
||||
CPI.setJoinQueryCondition(join, whereQueryCondition);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -116,6 +116,20 @@ public class AccountTester {
|
||||
System.out.println(accounts);
|
||||
}
|
||||
|
||||
/**
|
||||
* issues https://gitee.com/mybatis-flex/mybatis-flex/issues/I7QD29
|
||||
*/
|
||||
@Test
|
||||
public void testLeftJoinSelfForLogicDelete() {
|
||||
QueryWrapper queryWrapper = QueryWrapper.create();
|
||||
queryWrapper.from(ACCOUNT)
|
||||
.leftJoin(ACCOUNT).as("a1").on(ACCOUNT.ID.eq(ARTICLE.ACCOUNT_ID))
|
||||
.leftJoin(ACCOUNT).as("a2").on(ACCOUNT.ID.eq(ARTICLE.ACCOUNT_ID))
|
||||
.where(ACCOUNT.ID.ge(1));
|
||||
List<Article> accounts = articleMapper.selectListByQuery(queryWrapper);
|
||||
System.out.println(accounts);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testSelectAsToDTO() {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user