feat: 下一代大版本更新
This commit is contained in:
parent
c62cdff45d
commit
45940fc5e8
11
flyfish-data/README.md
Normal file
11
flyfish-data/README.md
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
# 核心数据框架
|
||||||
|
|
||||||
|
本模块是flyfish framework的最核心能力
|
||||||
|
其提供无感知的多种数据源支持,并完整适配了mongodb和rdbms的查询表现,
|
||||||
|
用户只需要用一套api即可完成数据的查询或修改,无需为了底层实现而大费周章重新开发。
|
||||||
|
|
||||||
|
## 核心架构
|
||||||
|
1. 基于Spring SPI模式,声明式注入查询实现工厂,动态替换查询构建逻辑
|
||||||
|
2. 按需引入,不浪费任何依赖,节省空间。使用maven的按需引入模式,让打包后的结果不必因为重量级的框架而变得冗余
|
||||||
|
3. 指哪打哪,稳定快速。集成最新版本的spring mongo引擎和spring data r2dbc
|
||||||
|
4. 核心框架广泛使用,保证"0bug"。
|
54
flyfish-data/flyfish-data-common/pom.xml
Normal file
54
flyfish-data/flyfish-data-common/pom.xml
Normal 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>
|
@ -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);
|
||||||
|
}
|
@ -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("未实现当前查询的适配工厂!"));
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,4 @@
|
|||||||
|
# 查询构建Fluent Api适配器
|
||||||
|
同时适配关系型数据库mysql和非关系型数据库mongodb
|
||||||
|
|
||||||
|
未来将会支持更多,采用覆盖的方式进行对象组合
|
@ -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();
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
package com.flyfish.framework.builder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询构建器提供者
|
||||||
|
* @author wangyu-
|
||||||
|
*/
|
||||||
|
public interface CriteriaBuilderProvider {
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -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;
|
19
flyfish-data/flyfish-data-mongodb/pom.xml
Normal file
19
flyfish-data/flyfish-data-mongodb/pom.xml
Normal 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>
|
34
flyfish-data/flyfish-data-r2dbc/pom.xml
Normal file
34
flyfish-data/flyfish-data-r2dbc/pom.xml
Normal 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>
|
@ -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
Loading…
x
Reference in New Issue
Block a user