Skip to content

Commit

Permalink
feat: 2.0.29 [#232]优化navigate和navigateFlat的错误用法提示
Browse files Browse the repository at this point in the history
  • Loading branch information
xuejmnet committed Jun 13, 2024
1 parent f4fcd8d commit 03b6946
Show file tree
Hide file tree
Showing 44 changed files with 361 additions and 117 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<groupId>com.easy-query</groupId>
<artifactId>easy-query-all</artifactId>
<packaging>pom</packaging>
<version>2.0.28</version>
<version>2.0.29</version>
<name>easy-query</name>
<description>java object query distributed connector</description>
<url>https://github.com/xuejmnet/easy-query</url>
Expand Down
8 changes: 4 additions & 4 deletions samples/console-demo/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>com.easy-query</groupId>
<artifactId>samples</artifactId>
<version>2.0.28</version>
<version>2.0.29</version>
</parent>

<artifactId>console-demo</artifactId>
Expand All @@ -22,21 +22,21 @@
<dependency>
<groupId>com.easy-query</groupId>
<artifactId>sql-mysql</artifactId>
<version>2.0.28</version>
<version>2.0.29</version>
<scope>compile</scope>
</dependency>
<!-- apt生成代理类 -->
<dependency>
<groupId>com.easy-query</groupId>
<artifactId>sql-processor</artifactId>
<version>2.0.28</version>
<version>2.0.29</version>
<scope>compile</scope>
</dependency>
<!-- 代理api -->
<dependency>
<groupId>com.easy-query</groupId>
<artifactId>sql-api-proxy</artifactId>
<version>2.0.28</version>
<version>2.0.29</version>
<scope>compile</scope>
</dependency>
<!-- mysql驱动 -->
Expand Down
6 changes: 3 additions & 3 deletions samples/easy-query-solon-web/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>com.easy-query</groupId>
<artifactId>samples</artifactId>
<version>2.0.28</version>
<version>2.0.29</version>
</parent>

<groupId>com.easy.query.solon</groupId>
Expand All @@ -22,13 +22,13 @@
<dependency>
<groupId>com.easy-query</groupId>
<artifactId>sql-solon-plugin</artifactId>
<version>2.0.28</version>
<version>2.0.29</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.easy-query</groupId>
<artifactId>sql-processor</artifactId>
<version>2.0.28</version>
<version>2.0.29</version>
<scope>compile</scope>
</dependency>
<dependency>
Expand Down
2 changes: 1 addition & 1 deletion samples/multi-datasource-demo/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@
<dependency>
<groupId>com.easy-query</groupId>
<artifactId>sql-springboot-starter</artifactId>
<version>2.0.28</version>
<version>2.0.29</version>
<scope>compile</scope>
</dependency>

Expand Down
4 changes: 2 additions & 2 deletions samples/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<artifactId>easy-query-all</artifactId>
<groupId>com.easy-query</groupId>
<version>2.0.28</version>
<version>2.0.29</version>
</parent>
<modelVersion>4.0.0</modelVersion>

Expand Down Expand Up @@ -44,7 +44,7 @@
<dependency>
<groupId>com.easy-query</groupId>
<artifactId>sql-springboot-starter</artifactId>
<version>2.0.28</version>
<version>2.0.29</version>
<scope>compile</scope>
</dependency>
</dependencies>
Expand Down
4 changes: 2 additions & 2 deletions samples/solon-sharding-demo/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>com.easy-query</groupId>
<artifactId>samples</artifactId>
<version>2.0.28</version>
<version>2.0.29</version>
</parent>

<groupId>com.easy.query</groupId>
Expand All @@ -22,7 +22,7 @@
<dependency>
<groupId>com.easy-query</groupId>
<artifactId>sql-solon-plugin</artifactId>
<version>2.0.28</version>
<version>2.0.29</version>
<scope>compile</scope>
</dependency>
<dependency>
Expand Down
4 changes: 2 additions & 2 deletions samples/spring-sharding-demo/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -55,13 +55,13 @@
<dependency>
<groupId>com.easy-query</groupId>
<artifactId>sql-processor</artifactId>
<version>2.0.28</version>
<version>2.0.29</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.easy-query</groupId>
<artifactId>sql-springboot-starter</artifactId>
<version>2.0.28</version>
<version>2.0.29</version>
<scope>compile</scope>
</dependency>
</dependencies>
Expand Down
6 changes: 3 additions & 3 deletions samples/springbootdemo/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -62,13 +62,13 @@
<dependency>
<groupId>com.easy-query</groupId>
<artifactId>sql-processor</artifactId>
<version>2.0.28</version>
<version>2.0.29</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.easy-query</groupId>
<artifactId>sql-springboot-starter</artifactId>
<version>2.0.28</version>
<version>2.0.29</version>
<scope>compile</scope>
</dependency>
<!-- &lt;!&ndash; https://mvnrepository.com/artifact/com.alibaba/druid &ndash;&gt;-->
Expand All @@ -90,7 +90,7 @@
<dependency>
<groupId>com.easy-query</groupId>
<artifactId>sql-cache</artifactId>
<version>2.0.28</version>
<version>2.0.29</version>
<scope>compile</scope>
</dependency>

Expand Down
2 changes: 1 addition & 1 deletion sql-core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<artifactId>easy-query-all</artifactId>
<groupId>com.easy-query</groupId>
<version>2.0.28</version>
<version>2.0.29</version>
</parent>
<modelVersion>4.0.0</modelVersion>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
/**
* create time 2024/5/14 08:41
* entity对象表不会生效
* NavigateFlat支持获取穿透数据库对象到VO
* 如果NavigateFlat了一个VO又在同级对象下获取了这个VO的id那么将会报错
*
* @author xuejiaming
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -675,7 +675,7 @@ protected <TR> void selectAutoInclude0(Class<TR> resultClass, boolean replace) {
private void selectAutoIncludeFlat0(EntityMetadataManager entityMetadataManager, ClientQueryable<?> clientQueryable, EntityMetadata entityMetadata, EntityMetadata resultEntityMetadata) {
Collection<NavigateFlatMetadata> navigateFlatMetadatas = resultEntityMetadata.getNavigateFlatMetadatas();
if (EasyCollectionUtil.isNotEmpty(navigateFlatMetadatas)) {
MappingPathTreeNode mappingPathTreeRoot = getMappingPathTree(navigateFlatMetadatas);
MappingPathTreeNode mappingPathTreeRoot = getMappingPathTree(navigateFlatMetadatas, resultEntityMetadata);
selectAutoIncludeFlat0(entityMetadataManager, clientQueryable, entityMetadata, mappingPathTreeRoot, true);
// for (MappingPathTreeNode mappingPathTree : mappingPathTreeRoot.getChildren()) {
//
Expand Down Expand Up @@ -703,11 +703,16 @@ private <TR> void selectAutoIncludeJoin0(Class<TR> resultClass, ClientQueryable<
}
}

private MappingPathTreeNode getMappingPathTree(Collection<NavigateFlatMetadata> navigateFlatMetadataCollection) {
private MappingPathTreeNode getMappingPathTree(Collection<NavigateFlatMetadata> navigateFlatMetadataCollection, EntityMetadata navigateEntityMetadata) {
MappingPathTreeNode root = new MappingPathTreeNode("EASY-QUERY-ROOT");
for (NavigateFlatMetadata navigateFlatMetadata : navigateFlatMetadataCollection) {
String[] mappingPath = navigateFlatMetadata.getMappingPath();
MappingPathTreeBuilder.insertPath(root, mappingPath, navigateFlatMetadata);
MappingPathTreeBuilder.insertPath(root, mappingPath, navigateFlatMetadata, path -> {
NavigateMetadata navigateOrNull = navigateEntityMetadata.getNavigateOrNull(path);
if (navigateOrNull != null) {
throw new EasyQueryInvalidOperationException(String.format("In the selectAutoInclude query, the relational propoerty [%s] of the class [%s] should appear in both @Navigate and @NavigateFlat.", path, EasyClassUtil.getSimpleName(navigateEntityMetadata.getEntityClass())));
}
});
}
return root;
// return EasyUtil.groupBy(navigateFlatMetadataCollection.stream(), o -> o.getMappingPath()[0])
Expand Down Expand Up @@ -784,7 +789,7 @@ private void selectAutoIncludeFlat0(EntityMetadataManager entityMetadataManager,
}
// List<NavigateFlatProperty> flatProperties = navigateFlatGroupProperty.values().collect(Collectors.toList());
//获取当前属性没有后续的属性了的 path最后一个是navigate那么就不可以是自定义dto只能是table
boolean basicType = mappingPathTreeChild.getNavigateFlatMetadataList().stream().anyMatch(o -> !o.isBasicType()&&o.getMappingPath().length==mappingPathTreeChild.getDeep());
boolean basicType = mappingPathTreeChild.getNavigateFlatMetadataList().stream().anyMatch(o -> !o.isBasicType() && o.getMappingPath().length == mappingPathTreeChild.getDeep());
// List<MappingPathTreeNode> customPathTypes = mappingPathTreeChild.getChildren().stream().filter(o -> !o.getNavigateFlatMetadata().isBasicType() && !o.hasChildren()).collect(Collectors.toList());
// String navigatePropName = resultNavigateMetadata.isBasicType() ? resultNavigateMetadata.getMappingProp().split("//.")[0] : resultNavigateMetadata.getPropertyName();

Expand All @@ -796,6 +801,7 @@ private void selectAutoIncludeFlat0(EntityMetadataManager entityMetadataManager,
return o.anyBasicType() && o.allBasicType(size) && !o.hasChildren();
}).collect(Collectors.toList());


clientQueryable
.include(t -> {
if (first) {
Expand All @@ -812,18 +818,25 @@ private void selectAutoIncludeFlat0(EntityMetadataManager entityMetadataManager,
// }
selectAutoIncludeFlat0(entityMetadataManager, with, entityEntityMetadata, mappingPathTreeChild, false);

if (basicType && mappingPathTreeChild.anyBasicType()) {
if (basicType) {
//检查是否存在自定义dto
List<NavigateFlatMetadata> navigateFlatMetadataList = mappingPathTreeChild.getNavigateFlatMetadataList().stream().filter(o -> !o.isBasicType()).collect(Collectors.toList());
for (NavigateFlatMetadata navigateFlatMetadata : navigateFlatMetadataList) {
List<NavigateFlatMetadata> navigateFlatMetadataList = mappingPathTreeChild.getNavigateFlatMetadataList().stream().filter(o -> !o.isBasicType() && o.getMappingPath().length == mappingPathTreeChild.getDeep() && Objects.equals(propertyName, o.getMappingPath()[o.getMappingPath().length - 1])).collect(Collectors.toList());
if (EasyCollectionUtil.isNotEmpty(navigateFlatMetadataList)) {
if (EasyCollectionUtil.isNotSingle(navigateFlatMetadataList)) {
throw new EasyQueryInvalidOperationException(String.format("In the class [%s], @NavigateFlat only allows one associated attribute: [%s] to exist.", EasyClassUtil.getSimpleName(entityMetadata.getEntityClass()), propertyName));
}
NavigateFlatMetadata navigateFlatMetadata = EasyCollectionUtil.first(navigateFlatMetadataList);

Class<?> navigatePropertyType = navigateFlatMetadata.getNavigatePropertyType();
if (Objects.equals(propertyName, mappingPathTreeChild.getName()) && !Objects.equals(with.queryClass(), navigatePropertyType)) {
throw new EasyQueryInvalidOperationException("NavigateFlat only supports basic types and database types");
//表示VO对象并不是最终的对象
if (mappingPathTreeChild.hasChildren()) {
if (EasyCollectionUtil.isEmpty(navigateFlatBasicProps) && !Objects.equals(with.queryClass(), navigatePropertyType)) {
throw new EasyQueryInvalidOperationException(String.format("@NavigateFlat cannot simultaneously include non-database related objects: [%s] and its object properties.", EasyClassUtil.getSimpleName(navigatePropertyType)));
}
}
t.getIncludeNavigateParams().setFlatClassType(navigatePropertyType);
}
}
if (!(basicType && mappingPathTreeChild.anyBasicType())) {
} else {
if (EasyCollectionUtil.isNotEmpty(navigateFlatBasicProps)) {
with = with.select(z -> {
for (MappingPathTreeNode navigateFlatBasicProp : navigateFlatBasicProps) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,10 @@ public EasyFlatIncludeProcessor(NavigateFlatMetadata navigateFlatMetadata, Inclu
super(includeParserResult, runtimeContext);
this.navigateFlatMetadata = navigateFlatMetadata;
//生成多个targetNaviaget在process的时候for调用
initNavigateFlatGetter(includeParserResult.getFlatQueryEntityMetadata(),navigateFlatMetadata,runtimeContext);
initNavigateFlatGetter(includeParserResult,includeParserResult.getFlatQueryEntityMetadata(),navigateFlatMetadata,runtimeContext);

}
public void initNavigateFlatGetter(EntityMetadata flatQueryEntityMetadata, NavigateFlatMetadata navigateFlatMetadata, QueryRuntimeContext runtimeContext){
public void initNavigateFlatGetter(IncludeParserResult includeParserResult,EntityMetadata flatQueryEntityMetadata, NavigateFlatMetadata navigateFlatMetadata, QueryRuntimeContext runtimeContext){
if(navigateFlatMetadata==null){
return;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -281,7 +281,8 @@ private void confirmNavigateProperty(boolean aliasEntity, ExpressionContext expr
includeParseContext.setIncludeQueryableExpression(() -> {
ClientQueryable<?> includeQueryable = includeQueryableExpression.apply();
EntityQueryExpressionBuilder sqlEntityExpressionBuilder = includeQueryable.getSQLEntityExpressionBuilder();
includeQueryable.select(aliasNavigateMetadata.getNavigatePropertyType(), t -> {
Class<?> aliasClassType = includeParseContext.getIncludeNavigateParams().getFlatClassType() == null ? aliasNavigateMetadata.getNavigatePropertyType() : includeParseContext.getIncludeNavigateParams().getFlatClassType();
includeQueryable.select(aliasClassType, t -> {
t.columnAll();
EasySQLExpressionUtil.appendTargetExtraTargetProperty(selfNavigateMetadata, sqlEntityExpressionBuilder, t.getSQLNative(), t.getTable());
});
Expand All @@ -295,7 +296,9 @@ private void confirmNavigateProperty(boolean aliasEntity, ExpressionContext expr
includeParseContext.setIncludeQueryableExpression(() -> {
ClientQueryable<?> includeQueryable = includeQueryableExpression.apply();
EntityQueryExpressionBuilder sqlEntityExpressionBuilder = includeQueryable.getSQLEntityExpressionBuilder();
return includeQueryable.select(aliasNavigateMetadata.getNavigatePropertyType(), t -> {
Class<?> aliasClassType = includeParseContext.getIncludeNavigateParams().getFlatClassType() == null ? aliasNavigateMetadata.getNavigatePropertyType() : includeParseContext.getIncludeNavigateParams().getFlatClassType();

return includeQueryable.select(aliasClassType, t -> {
columnIncludeExpression.getIncludeSelectorExpression().apply(t.getAsSelector());
EasySQLExpressionUtil.appendSelfExtraTargetProperty(sqlEntityExpressionBuilder, t.getSQLNative(), t.getTable());
EasySQLExpressionUtil.appendTargetExtraTargetProperty(selfNavigateMetadata, sqlEntityExpressionBuilder, t.getSQLNative(), t.getTable());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -376,7 +376,7 @@ private void createNavigateFlatMappingMetadata(NavigateFlat navigateFlat, Map<St

// Property<Object, ?> beanGetter = fastBean.getBeanGetter(fastBeanProperty);
PropertySetterCaller<Object> beanSetter = fastBean.getBeanSetter(fastBeanProperty);
NavigateFlatMetadata navigateFlatMetadata = new NavigateFlatMetadata(this, relationMappingType, mappingPath, navigateType, EasyClassUtil.isBasicTypeOrEnum(navigateType), beanSetter);
NavigateFlatMetadata navigateFlatMetadata = new NavigateFlatMetadata(this, relationMappingType, mappingPath, navigateType, EasyClassUtil.isBasicTypeOrEnum(navigateType), beanSetter,property);

property2NavigateFlatMap.put(property, navigateFlatMetadata);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ public class IncludeNavigateParams implements IncludeRelationIdAvailable {
private boolean mappingFlat=false;
private List<NavigateFlatMetadata> navigateFlatMetadataList;
private EntityMetadata flatQueryEntityMetadata;
private Class<?> flatClassType;
public IncludeNavigateParams(){
relationIds =new ArrayList<>();
}
Expand Down Expand Up @@ -109,6 +110,14 @@ public void setFlatQueryEntityMetadata(EntityMetadata flatQueryEntityMetadata) {
this.flatQueryEntityMetadata = flatQueryEntityMetadata;
}

public Class<?> getFlatClassType() {
return flatClassType;
}

public void setFlatClassType(Class<?> flatClassType) {
this.flatClassType = flatClassType;
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,19 @@
package com.easy.query.core.metadata;

import java.util.function.Consumer;

/**
* create time 2024/6/12 17:52
* 文件说明
*
* @author xuejiaming
*/
public class MappingPathTreeBuilder {
public static void insertPath(MappingPathTreeNode root, String[] path, NavigateFlatMetadata navigateFlatMetadata) {
public static void insertPath(MappingPathTreeNode root, String[] path, NavigateFlatMetadata navigateFlatMetadata, Consumer<String> checkInNavigateConsumer) {
MappingPathTreeNode currentNode = root;

for (String part : path) {
checkInNavigateConsumer.accept(part);
MappingPathTreeNode childNode = currentNode.findChild(part);
if (childNode == null) {
childNode = new MappingPathTreeNode(part);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,22 @@ public class NavigateFlatMetadata {
private final Class<?> navigatePropertyType;
private final boolean basicType;
private final PropertySetterCaller<Object> beanSetter;
private final String property;

public NavigateFlatMetadata(EntityMetadata entityMetadata,
RelationMappingTypeEnum relationMappingType,
String[] mappingPath,
Class<?> navigatePropertyType,
boolean basicType,
PropertySetterCaller<Object> beanSetter) {
PropertySetterCaller<Object> beanSetter,
String property) {
this.entityMetadata = entityMetadata;
this.relationMappingType = relationMappingType;
this.mappingPath = mappingPath;
this.navigatePropertyType = navigatePropertyType;
this.basicType=basicType;
this.beanSetter = beanSetter;
this.property = property;
}

public EntityMetadata getEntityMetadata() {
Expand All @@ -58,4 +61,8 @@ public PropertySetterCaller<Object> getBeanSetter() {
public Class<?> getNavigatePropertyType() {
return navigatePropertyType;
}

public String getProperty() {
return property;
}
}
2 changes: 1 addition & 1 deletion sql-db-support/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>com.easy-query</groupId>
<artifactId>easy-query-all</artifactId>
<version>2.0.28</version>
<version>2.0.29</version>
</parent>

<artifactId>sql-db-support</artifactId>
Expand Down

0 comments on commit 03b6946

Please sign in to comment.