From 89eaae41d55210c542b67103fde164c6c9b1a9e9 Mon Sep 17 00:00:00 2001 From: wangyu <727842003@qq.com> Date: Sat, 29 Jun 2024 13:50:37 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=9E=E7=8E=B0=E5=A4=9A=E5=AF=B9?= =?UTF-8?q?=E5=A4=9A=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- flyfish-data/flyfish-data-domain/pom.xml | 5 +- .../framework/domain/po/Department.java | 2 + .../com/flyfish/framework/domain/po/Role.java | 6 +- .../com/flyfish/framework/domain/po/User.java | 14 ++++- .../framework/domain/tree/TreeDomain.java | 3 + .../r2dbc/config/R2dbcDataConfig.java | 5 +- .../callback/ReferenceR2dbcCallback.java | 58 ++++++++++++++++++- .../framework/r2dbc/mapping}/Association.java | 10 +++- .../r2dbc/metadata/R2dbcTableMetadata.java | 9 +++ .../impl/SimpleR2dbcMetadataManager.java | 12 +++- .../r2dbc/metadata/reference/FieldSetter.java | 6 ++ .../metadata/reference/R2dbcAssociation.java | 6 -- .../metadata/reference/R2dbcCollection.java | 6 -- .../metadata/reference/R2dbcRelation.java | 37 ++++++++++++ .../impl/QueryingR2dbcReactiveRepository.java | 1 - .../framework/r2dbc/domain/TestDO.java | 2 +- flyfish-data/scripts/schema.sql | 15 +++++ 17 files changed, 169 insertions(+), 28 deletions(-) rename flyfish-data/{flyfish-data-domain/src/main/java/com/flyfish/framework/annotations/relation => flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/mapping}/Association.java (79%) create mode 100644 flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/metadata/reference/R2dbcRelation.java create mode 100644 flyfish-data/scripts/schema.sql diff --git a/flyfish-data/flyfish-data-domain/pom.xml b/flyfish-data/flyfish-data-domain/pom.xml index 57248f8..9b5a88b 100644 --- a/flyfish-data/flyfish-data-domain/pom.xml +++ b/flyfish-data/flyfish-data-domain/pom.xml @@ -23,8 +23,9 @@ flyfish-common - org.springframework.data - spring-data-relational + com.flyfish.framework + flyfish-data-r2dbc + ${revision} true diff --git a/flyfish-data/flyfish-data-domain/src/main/java/com/flyfish/framework/domain/po/Department.java b/flyfish-data/flyfish-data-domain/src/main/java/com/flyfish/framework/domain/po/Department.java index 16c8b35..24562a5 100644 --- a/flyfish-data/flyfish-data-domain/src/main/java/com/flyfish/framework/domain/po/Department.java +++ b/flyfish-data/flyfish-data-domain/src/main/java/com/flyfish/framework/domain/po/Department.java @@ -3,6 +3,7 @@ package com.flyfish.framework.domain.po; import com.flyfish.framework.domain.tree.TreeDomain; import lombok.*; import org.springframework.data.mongodb.core.mapping.Document; +import org.springframework.data.relational.core.mapping.Column; import org.springframework.data.relational.core.mapping.Table; /** @@ -24,6 +25,7 @@ public class Department extends TreeDomain { /** * 部门的完整名称 */ + @Column("full_name") private String fullName; /** diff --git a/flyfish-data/flyfish-data-domain/src/main/java/com/flyfish/framework/domain/po/Role.java b/flyfish-data/flyfish-data-domain/src/main/java/com/flyfish/framework/domain/po/Role.java index 17e1c36..377584a 100644 --- a/flyfish-data/flyfish-data-domain/src/main/java/com/flyfish/framework/domain/po/Role.java +++ b/flyfish-data/flyfish-data-domain/src/main/java/com/flyfish/framework/domain/po/Role.java @@ -3,8 +3,9 @@ package com.flyfish.framework.domain.po; import com.flyfish.framework.domain.base.AuditDomain; import com.flyfish.framework.enums.NamedEnum; import com.flyfish.framework.enums.RoleType; +import com.flyfish.framework.r2dbc.mapping.Association; import lombok.*; -import org.springframework.data.annotation.Reference; +import org.springframework.data.mongodb.core.mapping.DBRef; import org.springframework.data.mongodb.core.mapping.Document; import org.springframework.data.relational.core.mapping.Table; @@ -47,7 +48,8 @@ public class Role extends AuditDomain { /** * 角色拥有的权限 */ - @Reference(Permission.class) + @DBRef + @Association(relationTable = "rel_role_permission", field = "role_id", foreignField = "permission_id") private List permissions; /** diff --git a/flyfish-data/flyfish-data-domain/src/main/java/com/flyfish/framework/domain/po/User.java b/flyfish-data/flyfish-data-domain/src/main/java/com/flyfish/framework/domain/po/User.java index 1cc1207..33bd55a 100644 --- a/flyfish-data/flyfish-data-domain/src/main/java/com/flyfish/framework/domain/po/User.java +++ b/flyfish-data/flyfish-data-domain/src/main/java/com/flyfish/framework/domain/po/User.java @@ -6,12 +6,14 @@ import com.flyfish.framework.domain.base.AuditDomain; import com.flyfish.framework.domain.base.IUser; import com.flyfish.framework.enums.UserStatus; import com.flyfish.framework.enums.UserType; +import com.flyfish.framework.r2dbc.mapping.Association; import com.flyfish.framework.validation.spi.ConditionalGroup; import lombok.*; -import org.springframework.data.annotation.Reference; import org.springframework.data.annotation.Transient; import org.springframework.data.mongodb.core.index.Indexed; +import org.springframework.data.mongodb.core.mapping.DBRef; import org.springframework.data.mongodb.core.mapping.Document; +import org.springframework.data.relational.core.mapping.Column; import org.springframework.data.relational.core.mapping.Table; import java.time.LocalDateTime; @@ -70,23 +72,27 @@ public class User extends AuditDomain implements IUser { * 有效期 */ @JsonFormat(pattern = "yyyy-MM-dd") + @Column("valid_date") private LocalDateTime validDate; /** * 可操作校区 */ - @Reference(Department.class) + @DBRef + @Association(relationTable = "rel_user_depart", field = "user_id", foreignField = "depart_id") private List departments; /** * 所属角色 */ - @Reference(Role.class) + @DBRef + @Association(relationTable = "rel_user_depart", field = "user_id", foreignField = "depart_id") private List roles; /** * 微信openId */ + @Column("open_id") private String openId; /** @@ -103,11 +109,13 @@ public class User extends AuditDomain implements IUser { /** * 错误次数,防止恶意登录 */ + @Column("error_count") private Integer errorCount = 0; /** * 上次登录日期 */ + @Column("last_time") private LocalDateTime lastTime; @Override diff --git a/flyfish-data/flyfish-data-domain/src/main/java/com/flyfish/framework/domain/tree/TreeDomain.java b/flyfish-data/flyfish-data-domain/src/main/java/com/flyfish/framework/domain/tree/TreeDomain.java index 8cb7af2..a160855 100644 --- a/flyfish-data/flyfish-data-domain/src/main/java/com/flyfish/framework/domain/tree/TreeDomain.java +++ b/flyfish-data/flyfish-data-domain/src/main/java/com/flyfish/framework/domain/tree/TreeDomain.java @@ -4,6 +4,7 @@ import com.flyfish.framework.domain.base.AuditDomain; import lombok.Getter; import lombok.Setter; import org.springframework.data.annotation.Transient; +import org.springframework.data.relational.core.mapping.Column; import java.util.List; @@ -14,9 +15,11 @@ public abstract class TreeDomain> extends AuditDomain { public static final String ROOT = "0"; // 父id,顶级是0 + @Column("parent_id") private String parentId; // 冗余的父ids,方便查询 + @Column("parent_ids") private List parentIds; // 深度,遍历标识 diff --git a/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/config/R2dbcDataConfig.java b/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/config/R2dbcDataConfig.java index e0d1dc8..5302e69 100644 --- a/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/config/R2dbcDataConfig.java +++ b/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/config/R2dbcDataConfig.java @@ -45,8 +45,9 @@ public class R2dbcDataConfig { } @Bean - public EntityCallback referenceR2dbcCallback(R2dbcMetadataManager metadataManager) { - return new ReferenceR2dbcCallback(metadataManager); + public EntityCallback referenceR2dbcCallback(R2dbcEntityOperations entityOperations, R2dbcMetadataManager metadataManager) { + return new ReferenceR2dbcCallback(metadataManager, entityOperations.getDatabaseClient(), entityOperations.getDataAccessStrategy() + .getStatementMapper()); } @Bean diff --git a/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/config/callback/ReferenceR2dbcCallback.java b/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/config/callback/ReferenceR2dbcCallback.java index e72aa47..50ee424 100644 --- a/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/config/callback/ReferenceR2dbcCallback.java +++ b/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/config/callback/ReferenceR2dbcCallback.java @@ -5,8 +5,10 @@ import com.flyfish.framework.domain.base.Qo; import com.flyfish.framework.query.Queries; import com.flyfish.framework.r2dbc.metadata.R2dbcMetadataManager; import com.flyfish.framework.r2dbc.metadata.R2dbcTableMetadata; +import com.flyfish.framework.r2dbc.metadata.reference.FieldSetter; import com.flyfish.framework.r2dbc.metadata.reference.R2dbcAssociation; import com.flyfish.framework.r2dbc.metadata.reference.R2dbcCollection; +import com.flyfish.framework.r2dbc.metadata.reference.R2dbcRelation; import com.flyfish.framework.repository.DefaultReactiveRepository; import lombok.RequiredArgsConstructor; import org.apache.commons.collections4.CollectionUtils; @@ -17,12 +19,17 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mapping.PersistentEntity; import org.springframework.data.mapping.PersistentProperty; import org.springframework.data.mapping.PersistentPropertyAccessor; +import org.springframework.data.r2dbc.core.StatementMapper; import org.springframework.data.r2dbc.mapping.event.AfterConvertCallback; import org.springframework.data.relational.core.mapping.RelationalPersistentProperty; +import org.springframework.data.relational.core.query.Criteria; import org.springframework.data.relational.core.sql.SqlIdentifier; import org.springframework.data.util.CastUtils; import org.springframework.data.util.Lazy; import org.springframework.lang.NonNull; +import org.springframework.r2dbc.core.DatabaseClient; +import org.springframework.r2dbc.core.PreparedOperation; +import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import java.util.ArrayList; @@ -36,6 +43,8 @@ import java.util.stream.Collectors; public class ReferenceR2dbcCallback implements AfterConvertCallback { private final R2dbcMetadataManager r2dbcMetadataManager; + private final DatabaseClient databaseClient; + private final StatementMapper statementMapper; private Lazy, DefaultReactiveRepository>> repositories; @Override @@ -72,6 +81,7 @@ public class ReferenceR2dbcCallback implements AfterConvertCallback { List> signals = new ArrayList<>(); signals.addAll(fetchAssociation(metadata.getAssociations(), accessor)); signals.addAll(fetchCollections(metadata.getCollections(), accessor)); + signals.addAll(fetchAssociation()) // 尝试填充一对多关联 if (CollectionUtils.isNotEmpty(signals)) { @@ -111,9 +121,11 @@ public class ReferenceR2dbcCallback implements AfterConvertCallback { // 内部查询,以对象内的值作为查询条件 Object value = accessor.getProperty(association.getField()); if (ObjectUtils.isEmpty(value)) return; + // 准备设置 + FieldSetter setter = association.getSetter(); // 查询 Mono signal = repository.findById(String.valueOf(value)) - .map(result -> association.setValue(accessor.getBean(), result)) + .map(result -> setter.setValue(accessor.getBean(), result)) .defaultIfEmpty(accessor.getBean()); signals.add(signal); }); @@ -126,9 +138,11 @@ public class ReferenceR2dbcCallback implements AfterConvertCallback { String id = accessor.getBean().getId(); // 准备查询 DefaultReactiveRepository repository = getRepository(association.getEntity().getType()); + // 准备设置 + FieldSetter setter = association.getSetter(); // 直接通过外部字段查询 Mono signal = repository.findOne(Queries.where(getColumnName(association.getField())).eq(id).wrap()) - .map(result -> association.setValue(accessor.getBean(), result)) + .map(result -> setter.setValue(accessor.getBean(), result)) .defaultIfEmpty(accessor.getBean()); signals.add(signal); }); @@ -154,10 +168,48 @@ public class ReferenceR2dbcCallback implements AfterConvertCallback { String id = accessor.getBean().getId(); // 准备查询 DefaultReactiveRepository repository = getRepository(collection.getEntity().getType()); + // 准备设置 + FieldSetter setter = collection.getSetter(); // 直接通过外部字段查询 Mono signal = repository.findAll(Queries.where(getColumnName(collection.getField())).eq(id).wrap()) .collectList() - .map(result -> collection.setValue(accessor.getBean(), result)) + .map(result -> setter.setValue(accessor.getBean(), result)) + .defaultIfEmpty(accessor.getBean()); + signals.add(signal); + }); + } + return signals; + } + + /** + * 拉取多对多关联数据 + * + * @param relations 多对多关联信息 + * @param accessor 本对象的属性访问器 + * @return 结果 + */ + private List> fetchRelations(List relations, PersistentPropertyAccessor accessor) { + List> signals = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(relations)) { + // 生成DatabaseClient,执行sql语句查询 + relations.forEach(relation -> { + // 准备目标对象的repo + DefaultReactiveRepository repository = getRepository(relation.getEntity().getType()); + // 准备查询参数 + String id = accessor.getBean().getId(); + StatementMapper.SelectSpec select = statementMapper.createSelect("rel_table") + .withProjection(relation.getForeignField()).withCriteria(Criteria.where(relation.getField()).is(id)); + PreparedOperation operation = statementMapper.getMappedObject(select); + // 执行查询 + Flux ids = databaseClient.sql(operation) + .map(row -> row.get(0, String.class)) + .all(); + // 准备设置 + FieldSetter setter = relation.getSetter(); + // 查询最终结果 + Mono signal = repository.findAllById(ids) + .collectList() + .map(result -> setter.setValue(accessor.getBean(), result)) .defaultIfEmpty(accessor.getBean()); signals.add(signal); }); diff --git a/flyfish-data/flyfish-data-domain/src/main/java/com/flyfish/framework/annotations/relation/Association.java b/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/mapping/Association.java similarity index 79% rename from flyfish-data/flyfish-data-domain/src/main/java/com/flyfish/framework/annotations/relation/Association.java rename to flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/mapping/Association.java index bb80e2f..ecfb04c 100644 --- a/flyfish-data/flyfish-data-domain/src/main/java/com/flyfish/framework/annotations/relation/Association.java +++ b/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/mapping/Association.java @@ -1,4 +1,4 @@ -package com.flyfish.framework.annotations.relation; +package com.flyfish.framework.r2dbc.mapping; import org.springframework.data.annotation.Transient; @@ -31,4 +31,12 @@ public @interface Association { * 与field互斥,同时指定永远都以field为主 */ String foreignField() default ""; + + /** + * 关系表,针对多对多的情况 + * 配置了该项的情况下,field和foreignField都为该表上的字段 + * + * @return 结果 + */ + String relationTable() default ""; } diff --git a/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/metadata/R2dbcTableMetadata.java b/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/metadata/R2dbcTableMetadata.java index f371dbb..73654a2 100644 --- a/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/metadata/R2dbcTableMetadata.java +++ b/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/metadata/R2dbcTableMetadata.java @@ -1,9 +1,11 @@ package com.flyfish.framework.r2dbc.metadata; import com.flyfish.framework.annotations.Property; +import com.flyfish.framework.r2dbc.mapping.Association; import com.flyfish.framework.r2dbc.metadata.reference.FieldSetter; import com.flyfish.framework.r2dbc.metadata.reference.R2dbcAssociation; import com.flyfish.framework.r2dbc.metadata.reference.R2dbcCollection; +import com.flyfish.framework.r2dbc.metadata.reference.R2dbcRelation; import lombok.Data; import org.springframework.data.mapping.PersistentEntity; import org.springframework.data.mapping.PersistentProperty; @@ -29,6 +31,9 @@ public class R2dbcTableMetadata { @Property("一对多关联信息") private List collections = new ArrayList<>(); + @Property("多对多关联信息") + private List relations = new ArrayList<>(); + public R2dbcTableMetadata(PersistentEntity entity) { this.entity = entity; } @@ -41,4 +46,8 @@ public class R2dbcTableMetadata { this.collections.add(R2dbcCollection.of(entity, property, setter)); } + public void addRelation(PersistentEntity entity, Association association, FieldSetter setter) { + this.relations.add(R2dbcRelation.of(entity, association, setter)); + } + } diff --git a/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/metadata/impl/SimpleR2dbcMetadataManager.java b/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/metadata/impl/SimpleR2dbcMetadataManager.java index 914a467..3c23bc7 100644 --- a/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/metadata/impl/SimpleR2dbcMetadataManager.java +++ b/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/metadata/impl/SimpleR2dbcMetadataManager.java @@ -1,6 +1,6 @@ package com.flyfish.framework.r2dbc.metadata.impl; -import com.flyfish.framework.annotations.relation.Association; +import com.flyfish.framework.r2dbc.mapping.Association; import com.flyfish.framework.domain.base.Domain; import com.flyfish.framework.r2dbc.metadata.R2dbcMetadataManager; import com.flyfish.framework.r2dbc.metadata.R2dbcTableMetadata; @@ -105,6 +105,11 @@ public class SimpleR2dbcMetadataManager implements R2dbcMetadataManager { if (ClassUtils.isAssignable(type, Domain.class)) { // 目标类型 PersistentEntity targetEntity = r2dbcMappingContext.getRequiredPersistentEntity(type); + // 多对多关联 + if (StringUtils.isNotBlank(association.relationTable())) { + metadata.addRelation(targetEntity, association, setter); + return; + } // 一对一关联 if (StringUtils.isNotBlank(association.field())) { // 获取内部属性 @@ -131,6 +136,11 @@ public class SimpleR2dbcMetadataManager implements R2dbcMetadataManager { if (null == entityType) return; // 目标类型 PersistentEntity targetEntity = r2dbcMappingContext.getRequiredPersistentEntity(entityType); + // 多对多关联 + if (StringUtils.isNotBlank(association.relationTable())) { + metadata.addRelation(targetEntity, association, setter); + return; + } // 一对多关联,仅支持外部字段 if (StringUtils.isNotBlank(association.foreignField())) { // 获取外部属性 diff --git a/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/metadata/reference/FieldSetter.java b/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/metadata/reference/FieldSetter.java index 964db16..21cbf55 100644 --- a/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/metadata/reference/FieldSetter.java +++ b/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/metadata/reference/FieldSetter.java @@ -1,8 +1,14 @@ package com.flyfish.framework.r2dbc.metadata.reference; +import com.flyfish.framework.domain.base.Domain; + import java.util.function.BiConsumer; @FunctionalInterface public interface FieldSetter extends BiConsumer { + default T setValue(T obj, Object value) { + accept(obj, value); + return obj; + } } diff --git a/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/metadata/reference/R2dbcAssociation.java b/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/metadata/reference/R2dbcAssociation.java index 87ca241..95c7ca3 100644 --- a/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/metadata/reference/R2dbcAssociation.java +++ b/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/metadata/reference/R2dbcAssociation.java @@ -1,7 +1,6 @@ package com.flyfish.framework.r2dbc.metadata.reference; import com.flyfish.framework.annotations.Property; -import com.flyfish.framework.domain.base.Domain; import lombok.AllArgsConstructor; import lombok.Data; import org.springframework.data.mapping.PersistentEntity; @@ -27,9 +26,4 @@ public class R2dbcAssociation { public static R2dbcAssociation of(PersistentEntity entity, PersistentProperty field, FieldSetter setter, boolean inner) { return new R2dbcAssociation(entity, field, setter, inner); } - - public T setValue(T obj, Object value) { - setter.accept(obj, value); - return obj; - } } diff --git a/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/metadata/reference/R2dbcCollection.java b/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/metadata/reference/R2dbcCollection.java index 54d6ad3..9898347 100644 --- a/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/metadata/reference/R2dbcCollection.java +++ b/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/metadata/reference/R2dbcCollection.java @@ -1,7 +1,6 @@ package com.flyfish.framework.r2dbc.metadata.reference; import com.flyfish.framework.annotations.Property; -import com.flyfish.framework.domain.base.Domain; import lombok.AllArgsConstructor; import lombok.Data; import org.springframework.data.mapping.PersistentEntity; @@ -24,9 +23,4 @@ public class R2dbcCollection { public static R2dbcCollection of(PersistentEntity entity, PersistentProperty field, FieldSetter setter) { return new R2dbcCollection(entity, field, setter); } - - public T setValue(T obj, Object value) { - setter.accept(obj, value); - return obj; - } } diff --git a/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/metadata/reference/R2dbcRelation.java b/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/metadata/reference/R2dbcRelation.java new file mode 100644 index 0000000..72b7d39 --- /dev/null +++ b/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/metadata/reference/R2dbcRelation.java @@ -0,0 +1,37 @@ +package com.flyfish.framework.r2dbc.metadata.reference; + +import com.flyfish.framework.annotations.Property; +import com.flyfish.framework.r2dbc.mapping.Association; +import lombok.AllArgsConstructor; +import lombok.Data; +import org.springframework.data.mapping.PersistentEntity; + +/** + * 多对多关系 + * + * @author wangyu + */ +@Data +@Property("多对多关系") +@AllArgsConstructor +public class R2dbcRelation { + + @Property("关联实体类") + private PersistentEntity entity; + + @Property("关系表名称") + private String tableName; + + @Property("关系表本实体id字段") + private String field; + + @Property("关系表外部实体id字段") + private String foreignField; + + @Property("目标值设置器") + private FieldSetter setter; + + public static R2dbcRelation of(PersistentEntity entity, Association association, FieldSetter setter) { + return new R2dbcRelation(entity, association.relationTable(), association.field(), association.foreignField(), setter); + } +} diff --git a/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/repository/impl/QueryingR2dbcReactiveRepository.java b/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/repository/impl/QueryingR2dbcReactiveRepository.java index f9d1c4b..164673a 100644 --- a/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/repository/impl/QueryingR2dbcReactiveRepository.java +++ b/flyfish-data/flyfish-data-r2dbc/src/main/java/com/flyfish/framework/r2dbc/repository/impl/QueryingR2dbcReactiveRepository.java @@ -49,7 +49,6 @@ public class QueryingR2dbcReactiveRepository extends SimpleR2d super(entity, entityOperations, converter); this.entity = entity; this.entityOperations = entityOperations; - } /** diff --git a/flyfish-data/flyfish-data-r2dbc/src/test/java/com/flyfish/framework/r2dbc/domain/TestDO.java b/flyfish-data/flyfish-data-r2dbc/src/test/java/com/flyfish/framework/r2dbc/domain/TestDO.java index 8046c25..077a54e 100644 --- a/flyfish-data/flyfish-data-r2dbc/src/test/java/com/flyfish/framework/r2dbc/domain/TestDO.java +++ b/flyfish-data/flyfish-data-r2dbc/src/test/java/com/flyfish/framework/r2dbc/domain/TestDO.java @@ -1,6 +1,6 @@ package com.flyfish.framework.r2dbc.domain; -import com.flyfish.framework.annotations.relation.Association; +import com.flyfish.framework.r2dbc.mapping.Association; import com.flyfish.framework.domain.base.AuditDomain; import com.flyfish.framework.r2dbc.domain.reference.TestAsso; import com.flyfish.framework.r2dbc.domain.reference.TestChild; diff --git a/flyfish-data/scripts/schema.sql b/flyfish-data/scripts/schema.sql new file mode 100644 index 0000000..86b2af2 --- /dev/null +++ b/flyfish-data/scripts/schema.sql @@ -0,0 +1,15 @@ +CREATE TABLE IF NOT EXISTS `test` +( + `id` VARCHAR(36) NOT NULL COMMENT '主键', + `code` VARCHAR(32) NOT NULL COMMENT '编码', + `name` VARCHAR(100) NOT NULL COMMENT '名称', + `other_id` VARCHAR(36) NULL COMMENT '其他id', + `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `modify_time` DATETIME NOT NULL COMMENT '修改时间', + `creator` VARCHAR(36) NULL COMMENT '创建人名称', + `creator_id` VARCHAR(36) NULL COMMENT '创建人id', + `modifier` VARCHAR(36) NULL COMMENT '修改人名称', + `modifier_id` VARCHAR(36) NULL COMMENT '修改人id', + `delete` BIT(1) NOT NULL DEFAULT b'0', + PRIMARY KEY (`id`) +) COMMENT '测试表';