feat: 下一代大版本更新

This commit is contained in:
wangyu 2022-08-03 16:39:25 +08:00
parent c62cdff45d
commit 45940fc5e8
105 changed files with 357 additions and 36 deletions

11
flyfish-data/README.md Normal file
View File

@ -0,0 +1,11 @@
# 核心数据框架
本模块是flyfish framework的最核心能力
其提供无感知的多种数据源支持并完整适配了mongodb和rdbms的查询表现
用户只需要用一套api即可完成数据的查询或修改无需为了底层实现而大费周章重新开发。
## 核心架构
1. 基于Spring SPI模式声明式注入查询实现工厂动态替换查询构建逻辑
2. 按需引入不浪费任何依赖节省空间。使用maven的按需引入模式让打包后的结果不必因为重量级的框架而变得冗余
3. 指哪打哪稳定快速。集成最新版本的spring mongo引擎和spring data r2dbc
4. 核心框架广泛使用,保证"0bug"。

View File

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>flyfish-data</artifactId>
<groupId>com.flyfish.framework</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>flyfish-data-common</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>com.flyfish.framework</groupId>
<artifactId>flyfish-common</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb-reactive</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-r2dbc</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,105 @@
package com.flyfish.framework.adaptor;
import org.bson.BsonRegularExpression;
import org.springframework.data.domain.Example;
import org.springframework.data.geo.Circle;
import org.springframework.data.geo.Point;
import org.springframework.data.geo.Shape;
import org.springframework.data.mongodb.core.geo.GeoJson;
import org.springframework.data.mongodb.core.schema.JsonSchemaObject;
import java.util.Collection;
import java.util.regex.Pattern;
/**
* 查询适配器
*
* @author wangyu
* 由工厂进行实例化并输出
*/
public interface CriteriaAdaptor {
CriteriaAdaptor and(String key);
CriteriaAdaptor is(Object value);
CriteriaAdaptor isNull();
CriteriaAdaptor isNullValue();
CriteriaAdaptor ne(Object value);
CriteriaAdaptor lt(Object value);
CriteriaAdaptor lte(Object value);
CriteriaAdaptor gt(Object value);
CriteriaAdaptor gte(Object value);
CriteriaAdaptor in(Object... values);
CriteriaAdaptor in(Collection<?> values);
CriteriaAdaptor nin(Object... values);
CriteriaAdaptor nin(Collection<?> values);
CriteriaAdaptor mod(Number value, Number remainder);
CriteriaAdaptor all(Object... values);
CriteriaAdaptor all(Collection<?> values);
CriteriaAdaptor size(int size);
CriteriaAdaptor exists(boolean value);
CriteriaAdaptor sampleRate(double sampleRate);
CriteriaAdaptor type(int typeNumber);
CriteriaAdaptor type(JsonSchemaObject.Type... types);
CriteriaAdaptor type(Collection<JsonSchemaObject.Type> types);
CriteriaAdaptor not();
CriteriaAdaptor regex(String regex);
CriteriaAdaptor regex(String regex, String options);
CriteriaAdaptor regex(Pattern pattern);
CriteriaAdaptor regex(BsonRegularExpression regex);
CriteriaAdaptor withinSphere(Circle circle);
CriteriaAdaptor within(Shape shape);
CriteriaAdaptor near(Point point);
CriteriaAdaptor nearSphere(Point point);
CriteriaAdaptor intersects(GeoJson geoJson);
CriteriaAdaptor maxDistance(double maxDistance);
CriteriaAdaptor minDistance(double minDistance);
CriteriaAdaptor elemMatch(CriteriaAdaptor criteria);
CriteriaAdaptor alike(Example<?> sample);
CriteriaAdaptor orOperator(CriteriaAdaptor... criteria);
CriteriaAdaptor orOperator(Collection<CriteriaAdaptor> criteria);
CriteriaAdaptor norOperator(CriteriaAdaptor... criteria);
CriteriaAdaptor norOperator(Collection<CriteriaAdaptor> criteria);
CriteriaAdaptor andOperator(CriteriaAdaptor... criteria);
CriteriaAdaptor andOperator(Collection<CriteriaAdaptor> criteria);
}

View File

@ -0,0 +1,34 @@
package com.flyfish.framework.adaptor;
import com.flyfish.framework.adaptor.spi.CriteriaAdaptorFactory;
import org.springframework.core.io.support.SpringFactoriesLoader;
import org.springframework.dao.InvalidDataAccessApiUsageException;
import java.util.List;
/**
* 可以通过该工具类快速创建适配器
*
* @author wangyu
*/
public final class CriteriaAdaptors {
private static final List<CriteriaAdaptorFactory> FACTORIES =
SpringFactoriesLoader.loadFactories(CriteriaAdaptorFactory.class, null);
public static CriteriaAdaptor getAdaptor() {
return FACTORIES.stream()
.findFirst()
.map(CriteriaAdaptorFactory::produce)
.orElseThrow(() -> new InvalidDataAccessApiUsageException("未实现当前查询的适配工厂!"));
}
public static CriteriaAdaptor getAdaptor(Object criteria) {
return FACTORIES.stream()
.filter(factory -> factory.criteriaType().isAssignableFrom(criteria.getClass()))
.findFirst()
.map(CriteriaAdaptorFactory::produce)
.orElseThrow(() -> new InvalidDataAccessApiUsageException("未实现当前查询的适配工厂!"));
}
}

View File

@ -0,0 +1,4 @@
# 查询构建Fluent Api适配器
同时适配关系型数据库mysql和非关系型数据库mongodb
未来将会支持更多,采用覆盖的方式进行对象组合

View File

@ -0,0 +1,26 @@
package com.flyfish.framework.adaptor.spi;
import com.flyfish.framework.adaptor.CriteriaAdaptor;
/**
* 查询适配器
* 基于spi提供实现类最终返回对应的
*
* @author wangyu
*/
public interface CriteriaAdaptorFactory {
/**
* 生产适配器
*
* @return 结果
*/
CriteriaAdaptor produce();
/**
* 查询类型
*
* @return 结果
*/
Class<?> criteriaType();
}

View File

@ -0,0 +1,10 @@
package com.flyfish.framework.builder;
/**
* 查询构建器提供者
* @author wangyu-
*/
public interface CriteriaBuilderProvider {
}

View File

@ -1,6 +1,5 @@
package com.flyfish.framework.repository.factory; package com.flyfish.framework.repository.factory;
import com.flyfish.framework.repository.impl.DefaultReactiveRepositoryImpl;
import org.springframework.data.mongodb.core.ReactiveMongoOperations; import org.springframework.data.mongodb.core.ReactiveMongoOperations;
import org.springframework.data.mongodb.repository.support.ReactiveMongoRepositoryFactory; import org.springframework.data.mongodb.repository.support.ReactiveMongoRepositoryFactory;
import org.springframework.data.repository.core.RepositoryMetadata; import org.springframework.data.repository.core.RepositoryMetadata;

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>flyfish-data</artifactId>
<groupId>com.flyfish.framework</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>flyfish-data-mongodb</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
</project>

View File

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>flyfish-data</artifactId>
<groupId>com.flyfish.framework</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>flyfish-data-r2dbc</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-r2dbc</artifactId>
</dependency>
<dependency>
<groupId>dev.miku</groupId>
<artifactId>r2dbc-mysql</artifactId>
</dependency>
<dependency>
<groupId>com.flyfish.framework</groupId>
<artifactId>flyfish-data-common</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>

View File

@ -0,0 +1,34 @@
package com.flyfish.framework.r2dbc.adaptor;
import com.flyfish.framework.adaptor.CriteriaAdaptor;
import com.flyfish.framework.adaptor.spi.CriteriaAdaptorFactory;
import org.springframework.data.relational.core.query.Criteria;
/**
* 实现适配层和底层的转化
*
* @author wangyu
*/
public class R2DbcCriteriaAdaptorFactory implements CriteriaAdaptorFactory {
/**
* 生产适配器
*
* @return 结果
*/
@Override
public CriteriaAdaptor produce() {
return null;
}
/**
* 查询类型
*
* @return 结果
*/
@Override
public Class<?> criteriaType() {
return Criteria.class;
}
}

Some files were not shown because too many files have changed in this diff Show More