mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-07 17:18: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;
|
package com.mybatisflex.core.logicdelete;
|
||||||
|
|
||||||
import com.mybatisflex.core.dialect.IDialect;
|
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.query.QueryWrapper;
|
||||||
import com.mybatisflex.core.table.TableInfo;
|
import com.mybatisflex.core.table.TableInfo;
|
||||||
|
|
||||||
@ -41,10 +42,10 @@ public abstract class AbstractLogicDeleteProcessor implements LogicDeleteProcess
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void buildQueryCondition(QueryWrapper queryWrapper, TableInfo tableInfo) {
|
public void buildQueryCondition(QueryWrapper queryWrapper, TableInfo tableInfo, String joinTableAlias) {
|
||||||
queryWrapper.and(QueryCondition.create(tableInfo.getSchema(), tableInfo.getTableName(), tableInfo.getLogicDeleteColumn()
|
QueryTable queryTable = new QueryTable(tableInfo.getSchema(), tableInfo.getTableName()).as(joinTableAlias);
|
||||||
, EQUALS
|
QueryColumn queryColumn = new QueryColumn(queryTable, tableInfo.getLogicDeleteColumn());
|
||||||
, getLogicNormalValue()));
|
queryWrapper.and(queryColumn.eq(getLogicNormalValue()));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -44,11 +44,11 @@ public interface LogicDeleteProcessor {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 用于构建通过 {@link QueryWrapper} 查询数据时的内容。
|
* 用于构建通过 {@link QueryWrapper} 查询数据时的内容。
|
||||||
*
|
* @param queryWrapper 条件构造器
|
||||||
* @param queryWrapper 条件构造器
|
|
||||||
* @param tableInfo 表信息
|
* @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.dialect.IDialect;
|
||||||
import com.mybatisflex.core.query.QueryColumn;
|
import com.mybatisflex.core.query.QueryColumn;
|
||||||
|
import com.mybatisflex.core.query.QueryTable;
|
||||||
import com.mybatisflex.core.query.QueryWrapper;
|
import com.mybatisflex.core.query.QueryWrapper;
|
||||||
import com.mybatisflex.core.table.TableInfo;
|
import com.mybatisflex.core.table.TableInfo;
|
||||||
|
|
||||||
@ -35,8 +36,9 @@ public abstract class NullableColumnLogicDeleteProcessor extends AbstractLogicDe
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void buildQueryCondition(QueryWrapper queryWrapper, TableInfo tableInfo) {
|
public void buildQueryCondition(QueryWrapper queryWrapper, TableInfo tableInfo, String joinTableAlias) {
|
||||||
QueryColumn queryColumn = new QueryColumn(tableInfo.getSchema(), tableInfo.getTableName(), tableInfo.getLogicDeleteColumn());
|
QueryTable queryTable = new QueryTable(tableInfo.getSchema(), tableInfo.getTableName()).as(joinTableAlias);
|
||||||
|
QueryColumn queryColumn = new QueryColumn(queryTable, tableInfo.getLogicDeleteColumn());
|
||||||
queryWrapper.and(queryColumn.isNull());
|
queryWrapper.and(queryColumn.isNull());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -18,8 +18,6 @@ package com.mybatisflex.core.logicdelete.impl;
|
|||||||
import com.mybatisflex.core.FlexGlobalConfig;
|
import com.mybatisflex.core.FlexGlobalConfig;
|
||||||
import com.mybatisflex.core.dialect.IDialect;
|
import com.mybatisflex.core.dialect.IDialect;
|
||||||
import com.mybatisflex.core.logicdelete.AbstractLogicDeleteProcessor;
|
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 com.mybatisflex.core.table.TableInfo;
|
||||||
|
|
||||||
import static com.mybatisflex.core.constant.SqlConsts.EQUALS;
|
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 {
|
public class DefaultLogicDeleteProcessor extends AbstractLogicDeleteProcessor {
|
||||||
|
|
||||||
@ -40,13 +39,6 @@ public class DefaultLogicDeleteProcessor extends AbstractLogicDeleteProcessor {
|
|||||||
return dialect.wrap(logicColumn) + EQUALS + prepareValue(getLogicDeletedValue());
|
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
|
@Override
|
||||||
public Object getLogicNormalValue() {
|
public Object getLogicNormalValue() {
|
||||||
return FlexGlobalConfig.getDefaultConfig().getNormalValueOfLogicDelete();
|
return FlexGlobalConfig.getDefaultConfig().getNormalValueOfLogicDelete();
|
||||||
|
|||||||
@ -80,6 +80,14 @@ public class QueryTable implements CloneSupport<QueryTable> {
|
|||||||
return StringUtil.isNotBlank(schema) ? schema + "." + name : name;
|
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) {
|
public QueryTable as(String alias) {
|
||||||
this.alias = alias;
|
this.alias = alias;
|
||||||
return this;
|
return this;
|
||||||
|
|||||||
@ -779,7 +779,8 @@ public class TableInfo {
|
|||||||
|
|
||||||
//逻辑删除
|
//逻辑删除
|
||||||
if (StringUtil.isNotBlank(getLogicDeleteColumnOrSkip())) {
|
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)) {
|
if (CollectionUtil.isNotEmpty(joins)) {
|
||||||
for (Join join : joins) {
|
for (Join join : joins) {
|
||||||
QueryTable joinQueryTable = CPI.getJoinQueryTable(join);
|
QueryTable joinQueryTable = CPI.getJoinQueryTable(join);
|
||||||
|
|
||||||
|
//join select
|
||||||
if (joinQueryTable instanceof SelectQueryTable) {
|
if (joinQueryTable instanceof SelectQueryTable) {
|
||||||
QueryWrapper childQuery = ((SelectQueryTable) joinQueryTable).getQueryWrapper();
|
QueryWrapper childQuery = ((SelectQueryTable) joinQueryTable).getQueryWrapper();
|
||||||
doAppendConditions(entity, childQuery);
|
doAppendConditions(entity, childQuery);
|
||||||
} else {
|
}
|
||||||
|
//join table
|
||||||
|
else {
|
||||||
String nameWithSchema = joinQueryTable.getNameWithSchema();
|
String nameWithSchema = joinQueryTable.getNameWithSchema();
|
||||||
if (StringUtil.isNotBlank(nameWithSchema)) {
|
if (StringUtil.isNotBlank(nameWithSchema)) {
|
||||||
TableInfo tableInfo = TableInfoFactory.ofTableName(nameWithSchema);
|
TableInfo tableInfo = TableInfoFactory.ofTableName(nameWithSchema);
|
||||||
@ -812,8 +816,10 @@ public class TableInfo {
|
|||||||
QueryCondition joinQueryCondition = CPI.getJoinQueryCondition(join);
|
QueryCondition joinQueryCondition = CPI.getJoinQueryCondition(join);
|
||||||
QueryWrapper newWrapper = QueryWrapper.create()
|
QueryWrapper newWrapper = QueryWrapper.create()
|
||||||
.where(joinQueryCondition);
|
.where(joinQueryCondition);
|
||||||
|
CPI.putContext(newWrapper, "joinTableAlias", joinQueryTable.getAlias());
|
||||||
tableInfo.appendConditions(entity, newWrapper);
|
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);
|
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
|
@Test
|
||||||
public void testSelectAsToDTO() {
|
public void testSelectAsToDTO() {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user