feat: 测试通过
This commit is contained in:
parent
27ec8bf22d
commit
fe1416cc81
@ -8,7 +8,6 @@ import com.flyfish.framework.r2dbc.metadata.visitor.MetadataHandler;
|
|||||||
import com.flyfish.framework.repository.DefaultReactiveRepository;
|
import com.flyfish.framework.repository.DefaultReactiveRepository;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
|
||||||
import org.springframework.data.mapping.PersistentEntity;
|
import org.springframework.data.mapping.PersistentEntity;
|
||||||
import org.springframework.data.mapping.PersistentProperty;
|
import org.springframework.data.mapping.PersistentProperty;
|
||||||
import org.springframework.data.mapping.PersistentPropertyAccessor;
|
import org.springframework.data.mapping.PersistentPropertyAccessor;
|
||||||
@ -24,7 +23,6 @@ import reactor.core.publisher.Mono;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.Stream;
|
|
||||||
|
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
class AssociationWriter implements MetadataHandler {
|
class AssociationWriter implements MetadataHandler {
|
||||||
@ -64,18 +62,18 @@ class AssociationWriter implements MetadataHandler {
|
|||||||
// 执行逻辑
|
// 执行逻辑
|
||||||
if (association.isInner()) {
|
if (association.isInner()) {
|
||||||
// 保存内部关联对象,并设置关联值。如果有id,更新,没有id,插入
|
// 保存内部关联对象,并设置关联值。如果有id,更新,没有id,插入
|
||||||
if (StringUtils.isNotBlank(value.getId())) {
|
if (association.getEntity().isNew(value)) {
|
||||||
// 设置内部id关联
|
|
||||||
accessor.setProperty(association.getField(), value.getId());
|
|
||||||
// 尝试保存
|
|
||||||
return repository.save(value).thenReturn(entity);
|
|
||||||
} else {
|
|
||||||
// 先保存,再设置
|
// 先保存,再设置
|
||||||
return repository.insert(value).map(saved -> {
|
return repository.insert(value).map(saved -> {
|
||||||
// 设置内部id关联
|
// 设置内部id关联
|
||||||
accessor.setProperty(association.getField(), saved.getId());
|
accessor.setProperty(association.getField(), saved.getId());
|
||||||
return entity;
|
return entity;
|
||||||
});
|
});
|
||||||
|
} else {
|
||||||
|
// 设置内部id关联
|
||||||
|
accessor.setProperty(association.getField(), value.getId());
|
||||||
|
// 尝试保存
|
||||||
|
return repository.save(value).thenReturn(entity);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// 保存外部关联对象,并更新外部关联当前实体的id
|
// 保存外部关联对象,并更新外部关联当前实体的id
|
||||||
@ -158,18 +156,20 @@ class AssociationWriter implements MetadataHandler {
|
|||||||
StatementMapper.DeleteSpec deleteSpec = statementMapper.createDelete(relation.getTableName())
|
StatementMapper.DeleteSpec deleteSpec = statementMapper.createDelete(relation.getTableName())
|
||||||
.withCriteria(Criteria.where(relation.getField()).is(entity.getId()));
|
.withCriteria(Criteria.where(relation.getField()).is(entity.getId()));
|
||||||
PreparedOperation<?> deletion = statementMapper.getMappedObject(deleteSpec);
|
PreparedOperation<?> deletion = statementMapper.getMappedObject(deleteSpec);
|
||||||
|
Mono<Domain> deleting = execute(databaseClient, deletion, entity);
|
||||||
// 构建插入语句,多条
|
// 构建插入语句,多条
|
||||||
List<Domain> items = relation.getAccessor().get(entity);
|
List<Domain> items = relation.getAccessor().get(entity);
|
||||||
Stream<PreparedOperation<?>> insertions = items.stream().map(item -> {
|
List<Mono<Domain>> insertions = items.stream()
|
||||||
|
.map(item -> {
|
||||||
StatementMapper.InsertSpec insertion = statementMapper.createInsert(relation.getTableName())
|
StatementMapper.InsertSpec insertion = statementMapper.createInsert(relation.getTableName())
|
||||||
.withColumn(relation.getField(), Parameter.from(entity.getId()))
|
.withColumn(relation.getField(), Parameter.from(entity.getId()))
|
||||||
.withColumn(relation.getForeignField(), Parameter.from(item.getId()));
|
.withColumn(relation.getForeignField(), Parameter.from(item.getId()));
|
||||||
return statementMapper.getMappedObject(insertion);
|
return statementMapper.getMappedObject(insertion);
|
||||||
});
|
})
|
||||||
|
.map(operation -> execute(databaseClient, operation, entity))
|
||||||
|
.collect(Collectors.toList());
|
||||||
// 执行查询
|
// 执行查询
|
||||||
return execute(databaseClient, deletion, entity)
|
return deleting.flatMap(list -> Mono.zip(insertions, results -> entity));
|
||||||
.map(e -> insertions.map(operation -> execute(databaseClient, operation, e)).collect(Collectors.toList()))
|
|
||||||
.flatMap(list -> Mono.zip(list, results -> entity));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -184,6 +184,7 @@ class AssociationWriter implements MetadataHandler {
|
|||||||
return databaseClient.sql(operation)
|
return databaseClient.sql(operation)
|
||||||
.map((row -> entity))
|
.map((row -> entity))
|
||||||
.all()
|
.all()
|
||||||
|
.defaultIfEmpty(entity)
|
||||||
.last();
|
.last();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -42,7 +42,7 @@ class DefaultFieldAccessor implements FieldAccessor {
|
|||||||
@Override
|
@Override
|
||||||
public <T extends Domain, R> R get(T obj) {
|
public <T extends Domain, R> R get(T obj) {
|
||||||
if (null != descriptor.getReadMethod()) {
|
if (null != descriptor.getReadMethod()) {
|
||||||
return invokeGetter(descriptor.getWriteMethod(), obj);
|
return invokeGetter(descriptor.getReadMethod(), obj);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -5,15 +5,18 @@ import com.alibaba.fastjson.serializer.SerializerFeature;
|
|||||||
import com.flyfish.framework.r2dbc.config.R2dbcDataConfig;
|
import com.flyfish.framework.r2dbc.config.R2dbcDataConfig;
|
||||||
import com.flyfish.framework.r2dbc.domain.TestDO;
|
import com.flyfish.framework.r2dbc.domain.TestDO;
|
||||||
import com.flyfish.framework.r2dbc.domain.TestQO;
|
import com.flyfish.framework.r2dbc.domain.TestQO;
|
||||||
|
import com.flyfish.framework.r2dbc.repository.TestAssoRepository;
|
||||||
import com.flyfish.framework.r2dbc.repository.TestRepository;
|
import com.flyfish.framework.r2dbc.repository.TestRepository;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.junit.jupiter.api.extension.ExtendWith;
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
import org.springframework.boot.test.context.SpringBootTest;
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
import org.springframework.context.annotation.Import;
|
import org.springframework.context.annotation.Import;
|
||||||
import org.springframework.test.context.junit.jupiter.SpringExtension;
|
import org.springframework.test.context.junit.jupiter.SpringExtension;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@ExtendWith(SpringExtension.class)
|
@ExtendWith(SpringExtension.class)
|
||||||
@SpringBootTest(classes = R2DbcRepositoryTest.class)
|
@SpringBootTest(classes = R2DbcRepositoryTest.class)
|
||||||
@ -23,6 +26,8 @@ public class R2DbcRepositoryTest {
|
|||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private TestRepository testRepository;
|
private TestRepository testRepository;
|
||||||
|
@Autowired
|
||||||
|
private TestAssoRepository testAssoRepository;
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void test() {
|
public void test() {
|
||||||
@ -37,7 +42,13 @@ public class R2DbcRepositoryTest {
|
|||||||
test.setName("测试名称");
|
test.setName("测试名称");
|
||||||
test.setOtherId("1");
|
test.setOtherId("1");
|
||||||
|
|
||||||
|
// 打印插入结果
|
||||||
System.out.println(JSON.toJSONString(testRepository.insert(test).block(), SerializerFeature.PrettyFormat));
|
System.out.println(JSON.toJSONString(testRepository.insert(test).block(), SerializerFeature.PrettyFormat));
|
||||||
System.out.println(JSON.toJSONString(testRepository.findAll(qo).collectList().block(), SerializerFeature.PrettyFormat));
|
List<TestDO> all = testRepository.findAll(qo).collectList().block();
|
||||||
|
System.out.println(JSON.toJSONString(all, SerializerFeature.PrettyFormat));
|
||||||
|
// 修改值并保存测试
|
||||||
|
all.get(0).getAsso().setName("修改后的值");
|
||||||
|
System.out.println(JSON.toJSONString(testRepository.saveAll(all).collectList().block(), SerializerFeature.PrettyFormat));
|
||||||
|
System.out.println(JSON.toJSONString(testAssoRepository.findById("1").block(), SerializerFeature.PrettyFormat));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user