optimize WrapperUtil.getValues

This commit is contained in:
开源海哥 2023-05-18 08:58:41 +08:00
parent 663ee88313
commit 499366c4e0
4 changed files with 49 additions and 41 deletions

View File

@ -18,7 +18,6 @@ package com.mybatisflex.core.query;
import com.mybatisflex.core.dialect.IDialect;
import com.mybatisflex.core.util.ClassUtil;
import com.mybatisflex.core.util.EnumWrapper;
import java.io.Serializable;
import java.lang.reflect.Array;
@ -99,12 +98,6 @@ public class QueryCondition implements Serializable {
}
public void setValue(Object value) {
if (value != null && value.getClass().isEnum()) {
EnumWrapper enumWrapper = new EnumWrapper(value.getClass());
if (enumWrapper.hasEnumValueAnnotation()) {
value = enumWrapper.getEnumValue((Enum) value);
}
}
this.value = value;
}

View File

@ -18,6 +18,7 @@ package com.mybatisflex.core.query;
import com.mybatisflex.core.util.ClassUtil;
import com.mybatisflex.core.util.CollectionUtil;
import com.mybatisflex.core.util.EnumWrapper;
import com.mybatisflex.core.util.StringUtil;
import java.lang.reflect.Array;
@ -82,14 +83,14 @@ class WrapperUtil {
return NULL_PARA_ARRAY;
}
List<Object> paras = new ArrayList<>();
getValues(condition, paras);
List<Object> params = new ArrayList<>();
getValues(condition, params);
return paras.isEmpty() ? NULL_PARA_ARRAY : paras.toArray();
return params.isEmpty() ? NULL_PARA_ARRAY : params.toArray();
}
private static void getValues(QueryCondition condition, List<Object> paras) {
private static void getValues(QueryCondition condition, List<Object> params) {
if (condition == null) {
return;
}
@ -98,29 +99,35 @@ class WrapperUtil {
if (value == null
|| value instanceof QueryColumn
|| value instanceof RawValue) {
getValues(condition.next, paras);
getValues(condition.next, params);
return;
}
if (value.getClass().isArray()) {
Object[] values = (Object[]) value;
for (Object object : values) {
if (object != null && ClassUtil.isArray(object.getClass())) {
for (int i = 0; i < Array.getLength(object); i++) {
paras.add(Array.get(object, i));
}
} else {
paras.add(object);
addParam(params, value);
getValues(condition.next, params);
}
private static void addParam(List<Object> paras, Object value) {
if (value == null) {
paras.add(null);
} else if (ClassUtil.isArray(value.getClass())) {
for (int i = 0; i < Array.getLength(value); i++) {
addParam(paras, Array.get(value, i));
}
} else if (value instanceof QueryWrapper) {
Object[] valueArray = ((QueryWrapper) value).getValueArray();
paras.addAll(Arrays.asList(valueArray));
} else if (value.getClass().isEnum()) {
EnumWrapper enumWrapper = new EnumWrapper(value.getClass());
if (enumWrapper.hasEnumValueAnnotation()) {
paras.add(enumWrapper.getEnumValue((Enum) value));
} else {
paras.add(value);
}
} else {
paras.add(value);
}
getValues(condition.next, paras);
}

View File

@ -25,7 +25,9 @@ import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
import javax.sql.DataSource;
import java.util.List;
import static com.mybatisflex.core.query.QueryMethods.select;
import static com.mybatisflex.test.table.Tables.ACCOUNT;
import static com.mybatisflex.test.table.Tables.ARTICLE;
@ -145,14 +147,15 @@ public class EntityTestStarter {
// .or(SYS_CONFIG.TYPE.like(word).when(StrChecker.isNotBlank(word)))
// );
// List<Account> accounts = accountMapper.selectListByQuery(
// select().where(ACCOUNT.AGE.ge(18).when(false))
// .and(ACCOUNT.USER_NAME.like("aaaa").when(false)
// .or(ACCOUNT.USER_NAME.like("aaaa").when(false))
// .or(ACCOUNT.USER_NAME.like("aaaa").when(false))
// .or(ACCOUNT.USER_NAME.like("aaaa").when(false))
// )
// );
List<Account> accounts = accountMapper.selectListByQuery(
select().where(ACCOUNT.AGE.ge(18).when(false))
.and(ACCOUNT.USER_NAME.like("aaaa").when(false)
.or(ACCOUNT.USER_NAME.like("aaaa").when(false))
.or(ACCOUNT.USER_NAME.like("aaaa").when(false))
.or(ACCOUNT.USER_NAME.like("aaaa").when(false))
)
);
System.out.println(accounts);
// Page<Account> paginate = accountMapper.paginate(1, 10, QueryWrapper.create());

View File

@ -18,6 +18,7 @@ package com.mybatisflex.test;
import com.mybatisflex.core.MybatisFlexBootstrap;
import com.mybatisflex.core.audit.AuditManager;
import com.mybatisflex.core.audit.ConsoleMessageCollector;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.core.tenant.TenantFactory;
import com.mybatisflex.core.tenant.TenantManager;
import com.mybatisflex.mapper.TenantAccountMapper;
@ -26,6 +27,10 @@ import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
import javax.sql.DataSource;
import static com.mybatisflex.core.query.QueryMethods.select;
import static com.mybatisflex.test.table.Tables.ACCOUNT;
import static com.mybatisflex.test.table.Tables.TENANT_ACCOUNT;
public class TenantTester {
public static void main(String[] args) {
@ -50,21 +55,21 @@ public class TenantTester {
TenantManager.setTenantFactory(new TenantFactory() {
@Override
public Object[] getTenantIds() {
return new Object[]{1};
return new Object[]{1,2};
}
});
TenantAccountMapper mapper = MybatisFlexBootstrap.getInstance().getMapper(TenantAccountMapper.class);
// mapper.selectListByQuery(QueryWrapper.create()
// .select(TENANT_ACCOUNT.ALL_COLUMNS)
// .from(TENANT_ACCOUNT.as("c"), ACCOUNT.as("b"))
// .where(TENANT_ACCOUNT.ID.eq(ACCOUNT.ID))
// .and(TENANT_ACCOUNT.ID.eq(1))
// .unionAll(select(TENANT_ACCOUNT.ALL_COLUMNS).from(TENANT_ACCOUNT)
// .where(TENANT_ACCOUNT.ID.eq(2))
// )
// );
mapper.selectListByQuery(QueryWrapper.create()
.select(TENANT_ACCOUNT.ALL_COLUMNS)
.from(TENANT_ACCOUNT.as("c"), ACCOUNT.as("b"))
.where(TENANT_ACCOUNT.ID.eq(ACCOUNT.ID))
.and(TENANT_ACCOUNT.ID.eq(1))
.unionAll(select(TENANT_ACCOUNT.ALL_COLUMNS).from(TENANT_ACCOUNT)
.where(TENANT_ACCOUNT.ID.eq(2))
)
);
// mapper.deleteBatchByIds(Arrays.asList(1, 2));