Merge branch 'main' of gitee.com:mybatis-flex/mybatis-flex into main

Signed-off-by: 王帅 <1474983351@qq.com>
This commit is contained in:
王帅 2023-07-12 02:30:23 +00:00 committed by Gitee
commit 302e884d67
3 changed files with 103 additions and 62 deletions

View File

@ -28,9 +28,7 @@ import com.mybatisflex.core.util.StringUtil;
import org.apache.ibatis.util.MapUtil;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
/**
@ -75,20 +73,27 @@ public class RelationManager {
}
@SuppressWarnings({"rawtypes", "unchecked"})
public static <Entity> void queryRelations(BaseMapper<?> mapper, List<Entity> entities) {
doQueryRelations(mapper, entities, new HashSet<>());
}
@SuppressWarnings({"rawtypes", "unchecked"})
private static <Entity> void doQueryRelations(BaseMapper<?> mapper, List<Entity> entities, Set<Class<?>> queriedClass) {
if (CollectionUtil.isEmpty(entities)) {
return;
}
Class<Entity> objectClass = (Class<Entity>) entities.get(0).getClass();
if (queriedClass.contains(objectClass)) {
return;
} else {
queriedClass.add(objectClass);
}
List<AbstractRelation> relations = getRelations(objectClass);
if (relations.isEmpty()) {
return;
}
String currentDsKey = DataSourceKey.get();
try {
relations.forEach(relation -> {
@ -104,7 +109,10 @@ public class RelationManager {
if (StringUtil.isNotBlank(dataSource)) {
DataSourceKey.use(dataSource);
}
List<?> targetObjectList = mapper.selectListByQueryAs(queryWrapper, mappingType);
doQueryRelations(mapper, targetObjectList, queriedClass);
if (CollectionUtil.isNotEmpty(targetObjectList)) {
relation.join(entities, targetObjectList, mapper);
}

View File

@ -20,6 +20,7 @@ import com.mybatisflex.core.query.QueryCondition;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.core.util.LambdaGetter;
import com.mybatisflex.core.util.LambdaUtil;
import com.mybatisflex.core.util.UpdateEntity;
import org.apache.ibatis.javassist.util.proxy.ProxyObject;
import java.io.Serializable;
@ -79,4 +80,13 @@ public interface UpdateWrapper extends Serializable {
return this;
}
static UpdateWrapper of(Object entity) {
if (entity instanceof UpdateWrapper) {
return (UpdateWrapper) entity;
} else {
return (UpdateWrapper) UpdateEntity.ofNotNull(entity);
}
}
}

View File

@ -21,6 +21,8 @@ import com.mybatisflex.core.audit.ConsoleMessageCollector;
import com.mybatisflex.core.audit.MessageCollector;
import com.mybatisflex.core.query.If;
import com.mybatisflex.core.query.QueryWrapper;
import com.mybatisflex.core.update.UpdateWrapper;
import com.mybatisflex.core.util.UpdateEntity;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
@ -85,4 +87,25 @@ public class AccountTester {
}
@Test
public void testUpdate() {
List<Account> accounts = accountMapper.selectAll();
System.out.println(accounts);
Account account = UpdateEntity.of(Account.class,1);
account.setUserName("lisi");
UpdateWrapper.of(account)
.setRaw("age","age + 1");
accountMapper.update(account);
accounts = accountMapper.selectAll();
System.out.println(accounts);
}
}