feat: 测试通过

This commit is contained in:
wangyu 2024-06-30 15:11:11 +08:00
parent 27ec8bf22d
commit fe1416cc81
3 changed files with 31 additions and 19 deletions

View File

@ -8,7 +8,6 @@ import com.flyfish.framework.r2dbc.metadata.visitor.MetadataHandler;
import com.flyfish.framework.repository.DefaultReactiveRepository;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.data.mapping.PersistentEntity;
import org.springframework.data.mapping.PersistentProperty;
import org.springframework.data.mapping.PersistentPropertyAccessor;
@ -24,7 +23,6 @@ import reactor.core.publisher.Mono;
import java.util.List;
import java.util.function.Supplier;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@RequiredArgsConstructor
class AssociationWriter implements MetadataHandler {
@ -64,18 +62,18 @@ class AssociationWriter implements MetadataHandler {
// 执行逻辑
if (association.isInner()) {
// 保存内部关联对象并设置关联值如果有id更新没有id插入
if (StringUtils.isNotBlank(value.getId())) {
// 设置内部id关联
accessor.setProperty(association.getField(), value.getId());
// 尝试保存
return repository.save(value).thenReturn(entity);
} else {
if (association.getEntity().isNew(value)) {
// 先保存再设置
return repository.insert(value).map(saved -> {
// 设置内部id关联
accessor.setProperty(association.getField(), saved.getId());
return entity;
});
} else {
// 设置内部id关联
accessor.setProperty(association.getField(), value.getId());
// 尝试保存
return repository.save(value).thenReturn(entity);
}
} else {
// 保存外部关联对象并更新外部关联当前实体的id
@ -158,18 +156,20 @@ class AssociationWriter implements MetadataHandler {
StatementMapper.DeleteSpec deleteSpec = statementMapper.createDelete(relation.getTableName())
.withCriteria(Criteria.where(relation.getField()).is(entity.getId()));
PreparedOperation<?> deletion = statementMapper.getMappedObject(deleteSpec);
Mono<Domain> deleting = execute(databaseClient, deletion, 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())
.withColumn(relation.getField(), Parameter.from(entity.getId()))
.withColumn(relation.getForeignField(), Parameter.from(item.getId()));
return statementMapper.getMappedObject(insertion);
});
})
.map(operation -> execute(databaseClient, operation, entity))
.collect(Collectors.toList());
// 执行查询
return execute(databaseClient, deletion, entity)
.map(e -> insertions.map(operation -> execute(databaseClient, operation, e)).collect(Collectors.toList()))
.flatMap(list -> Mono.zip(list, results -> entity));
return deleting.flatMap(list -> Mono.zip(insertions, results -> entity));
}
/**
@ -184,6 +184,7 @@ class AssociationWriter implements MetadataHandler {
return databaseClient.sql(operation)
.map((row -> entity))
.all()
.defaultIfEmpty(entity)
.last();
}
}

View File

@ -42,7 +42,7 @@ class DefaultFieldAccessor implements FieldAccessor {
@Override
public <T extends Domain, R> R get(T obj) {
if (null != descriptor.getReadMethod()) {
return invokeGetter(descriptor.getWriteMethod(), obj);
return invokeGetter(descriptor.getReadMethod(), obj);
}
return null;
}

View File

@ -5,15 +5,18 @@ import com.alibaba.fastjson.serializer.SerializerFeature;
import com.flyfish.framework.r2dbc.config.R2dbcDataConfig;
import com.flyfish.framework.r2dbc.domain.TestDO;
import com.flyfish.framework.r2dbc.domain.TestQO;
import com.flyfish.framework.r2dbc.repository.TestAssoRepository;
import com.flyfish.framework.r2dbc.repository.TestRepository;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.Import;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import javax.annotation.Resource;
import java.util.List;
@ExtendWith(SpringExtension.class)
@SpringBootTest(classes = R2DbcRepositoryTest.class)
@ -23,6 +26,8 @@ public class R2DbcRepositoryTest {
@Resource
private TestRepository testRepository;
@Autowired
private TestAssoRepository testAssoRepository;
@Test
public void test() {
@ -37,7 +42,13 @@ public class R2DbcRepositoryTest {
test.setName("测试名称");
test.setOtherId("1");
// 打印插入结果
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));
}
}