diff --git a/mongo-plus-annotation/pom.xml b/mongo-plus-annotation/pom.xml
index 4cc4acadef9b7764f7074437b9498de776cdad83..a812b49d04158c183ec5c0db62386da99acd4926 100644
--- a/mongo-plus-annotation/pom.xml
+++ b/mongo-plus-annotation/pom.xml
@@ -105,7 +105,7 @@
-
+
diff --git a/mongo-plus-annotation/src/main/java/com/anwen/mongo/enums/AggregateTypeEnum.java b/mongo-plus-annotation/src/main/java/com/anwen/mongo/enums/AggregateTypeEnum.java
index 2a5b88c2fe522fa92e8840a1cb301a9453a24bc9..64442d00160be878d17b931487b2ff0450dad951 100644
--- a/mongo-plus-annotation/src/main/java/com/anwen/mongo/enums/AggregateTypeEnum.java
+++ b/mongo-plus-annotation/src/main/java/com/anwen/mongo/enums/AggregateTypeEnum.java
@@ -27,7 +27,7 @@ public enum AggregateTypeEnum {
SAMPLE("sample"),
- UNION_WITH("unionWith"),
+ UNION_WITH("$unionWith"),
OUT("out")
diff --git a/mongo-plus-annotation/src/main/java/com/anwen/mongo/enums/ExecuteMethodEnum.java b/mongo-plus-annotation/src/main/java/com/anwen/mongo/enums/ExecuteMethodEnum.java
new file mode 100644
index 0000000000000000000000000000000000000000..a0a583b2f08db38ac34624ffe73ec1eca95d2eb0
--- /dev/null
+++ b/mongo-plus-annotation/src/main/java/com/anwen/mongo/enums/ExecuteMethodEnum.java
@@ -0,0 +1,35 @@
+package com.anwen.mongo.enums;
+
+/**
+ * 执行器方法枚举
+ *
+ * @author JiaChaoYang
+ **/
+public enum ExecuteMethodEnum {
+
+ SAVE("executeSave"),
+
+ REMOVE("executeRemove"),
+
+ UPDATE("executeUpdate"),
+
+ QUERY("executeQuery"),
+
+ AGGREGATE("executeAggregate"),
+
+ COUNT("executeCount"),
+
+ BULK_WRITE("executeBulkWrite")
+
+ ;
+
+ private final String method;
+
+ ExecuteMethodEnum(String method) {
+ this.method = method;
+ }
+
+ public String getMethod() {
+ return method;
+ }
+}
diff --git a/mongo-plus-annotation/src/main/java/com/anwen/mongo/enums/SpecialConditionEnum.java b/mongo-plus-annotation/src/main/java/com/anwen/mongo/enums/SpecialConditionEnum.java
index 9d0f54823357f724c070162b6340c82b87cbbb06..7eb5daa28daca58862591e25b65c8e780374630c 100644
--- a/mongo-plus-annotation/src/main/java/com/anwen/mongo/enums/SpecialConditionEnum.java
+++ b/mongo-plus-annotation/src/main/java/com/anwen/mongo/enums/SpecialConditionEnum.java
@@ -5,6 +5,8 @@ public enum SpecialConditionEnum {
OR("$or"),
+ AND("$and"),
+
NOR("$nor"),
SET("$set"),
diff --git a/mongo-plus-boot-starter/pom.xml b/mongo-plus-boot-starter/pom.xml
index 0bb91ce31e72fe7c8159863a182063e66bfd65a6..fb30e75c0b321889861740e7ae44f8e11d2f3932 100644
--- a/mongo-plus-boot-starter/pom.xml
+++ b/mongo-plus-boot-starter/pom.xml
@@ -134,7 +134,7 @@
-
+
diff --git a/mongo-plus-boot-starter/src/main/java/com/anwen/mongo/config/MongoPlusAutoConfiguration.java b/mongo-plus-boot-starter/src/main/java/com/anwen/mongo/config/MongoPlusAutoConfiguration.java
index ee21ee78c7e4d00379bded99d1f3f4219515568f..98bfd47a9bd8a6674d35fc0734a37cec66d69bc0 100644
--- a/mongo-plus-boot-starter/src/main/java/com/anwen/mongo/config/MongoPlusAutoConfiguration.java
+++ b/mongo-plus-boot-starter/src/main/java/com/anwen/mongo/config/MongoPlusAutoConfiguration.java
@@ -3,16 +3,18 @@ package com.anwen.mongo.config;
import com.anwen.mongo.annotation.collection.CollectionName;
import com.anwen.mongo.cache.global.HandlerCache;
import com.anwen.mongo.cache.global.InterceptorCache;
+import com.anwen.mongo.cache.global.ListenerCache;
import com.anwen.mongo.conn.CollectionManager;
import com.anwen.mongo.conn.ConnectMongoDB;
import com.anwen.mongo.convert.CollectionNameConvert;
-import com.anwen.mongo.execute.ExecutorFactory;
import com.anwen.mongo.handlers.DocumentHandler;
import com.anwen.mongo.handlers.MetaObjectHandler;
import com.anwen.mongo.interceptor.Interceptor;
-import com.anwen.mongo.interceptor.business.BlockAttackInnerInterceptor;
-import com.anwen.mongo.interceptor.business.LogInterceptor;
+import com.anwen.mongo.listener.Listener;
+import com.anwen.mongo.listener.business.BlockAttackInnerListener;
+import com.anwen.mongo.listener.business.LogListener;
import com.anwen.mongo.manager.MongoPlusClient;
+import com.anwen.mongo.mapper.BaseMapper;
import com.anwen.mongo.property.MongoDBCollectionProperty;
import com.anwen.mongo.property.MongoDBLogProperty;
import com.anwen.mongo.service.IService;
@@ -42,31 +44,32 @@ import java.util.stream.Collectors;
@EnableConfigurationProperties(MongoDBLogProperty.class)
public class MongoPlusAutoConfiguration implements InitializingBean {
- private final ExecutorFactory factory;
-
private final MongoPlusClient mongoPlusClient;
private final ApplicationContext applicationContext;
- private final MongoDBLogProperty mongoDBLogProperty;
+ private final MongoDBLogProperty mongodbLogProperty;
- private final MongoDBCollectionProperty mongoDBCollectionProperty;
+ private final MongoDBCollectionProperty mongodbCollectionProperty;
private final CollectionNameConvert collectionNameConvert;
+ private final BaseMapper baseMapper;
+
Logger logger = LoggerFactory.getLogger(MongoPlusAutoConfiguration.class);
- public MongoPlusAutoConfiguration(MongoDBLogProperty mongoDBLogProperty, MongoDBCollectionProperty mongoDBCollectionProperty, ExecutorFactory executeFactory, MongoPlusClient mongoPlusClient, ApplicationContext applicationContext, CollectionNameConvert collectionNameConvert) {
+ public MongoPlusAutoConfiguration(MongoDBLogProperty mongodbLogProperty, MongoDBCollectionProperty mongodbCollectionProperty, BaseMapper baseMapper, MongoPlusClient mongoPlusClient, ApplicationContext applicationContext, CollectionNameConvert collectionNameConvert) {
this.mongoPlusClient = mongoPlusClient;
this.applicationContext = applicationContext;
- this.mongoDBLogProperty = mongoDBLogProperty;
- this.mongoDBCollectionProperty = mongoDBCollectionProperty;
- this.factory = executeFactory;
+ this.mongodbLogProperty = mongodbLogProperty;
+ this.mongodbCollectionProperty = mongodbCollectionProperty;
this.collectionNameConvert = collectionNameConvert;
setConversion();
setMetaObjectHandler();
setDocumentHandler();
+ setListener();
setInterceptor();
+ this.baseMapper = baseMapper;
}
@Override
@@ -82,9 +85,8 @@ public class MongoPlusAutoConfiguration implements InitializingBean {
serviceImpl.setClazz(clazz);
String database = initFactory(clazz);
//这里需要将MongoPlusClient给工厂
- factory.setMongoPlusClient(mongoPlusClient);
serviceImpl.setDatabase(database);
- serviceImpl.setFactory(factory);
+ serviceImpl.setBaseMapper(baseMapper);
}
public String initFactory(Class> clazz) {
@@ -103,11 +105,11 @@ public class MongoPlusAutoConfiguration implements InitializingBean {
String database = mongoPlusClient.getBaseProperty().getDatabase();
Arrays.stream(database.split(",")).collect(Collectors.toList()).forEach(db -> {
CollectionManager collectionManager = new CollectionManager(mongoPlusClient.getMongoClient(), collectionNameConvert, db);
- ConnectMongoDB connectMongoDB = new ConnectMongoDB(mongoPlusClient.getMongoClient(), db, finalCollectionName);
+ ConnectMongoDB connectMongodb = new ConnectMongoDB(mongoPlusClient.getMongoClient(), db, finalCollectionName);
MongoDatabase mongoDatabase = mongoPlusClient.getMongoClient().getDatabase(db);
mongoDatabaseList.add(mongoDatabase);
if (Objects.equals(db, finalDataBaseName[0])){
- MongoCollection collection = connectMongoDB.open(mongoDatabase);
+ MongoCollection collection = connectMongodb.open(mongoDatabase);
collectionManager.setCollectionMap(finalCollectionName,collection);
}
put(db,collectionManager);
@@ -164,23 +166,33 @@ public class MongoPlusAutoConfiguration implements InitializingBean {
}
/**
- * 从Bean中拿到拦截器
+ * 从Bean中拿到监听器
* @author JiaChaoYang
* @date 2023/11/22 18:39
*/
- private void setInterceptor(){
- List interceptors = new ArrayList<>();
- if (mongoDBLogProperty.getLog()){
- interceptors.add(new LogInterceptor());
+ private void setListener(){
+ List listeners = new ArrayList<>();
+ if (mongodbLogProperty.getLog()){
+ listeners.add(new LogListener());
}
- if (mongoDBCollectionProperty.getBlockAttackInner()){
- interceptors.add(new BlockAttackInnerInterceptor());
+ if (mongodbCollectionProperty.getBlockAttackInner()){
+ listeners.add(new BlockAttackInnerListener());
}
- Collection interceptorCollection = applicationContext.getBeansOfType(Interceptor.class).values();
- if (CollUtil.isNotEmpty(interceptorCollection)){
- interceptors.addAll(interceptorCollection);
+ Collection listenerCollection = applicationContext.getBeansOfType(Listener.class).values();
+ if (CollUtil.isNotEmpty(listenerCollection)){
+ listeners.addAll(listenerCollection);
}
- InterceptorCache.interceptors = interceptors.stream().sorted(Comparator.comparingInt(Interceptor::getOrder)).collect(Collectors.toList());
+ ListenerCache.listeners = listeners.stream().sorted(Comparator.comparingInt(Listener::getOrder)).collect(Collectors.toList());
+ }
+
+ /**
+ * 从Bean中拿到拦截器
+ * @author JiaChaoYang
+ * @date 2024/3/17 0:30
+ */
+ private void setInterceptor(){
+ Collection interceptorCollection = applicationContext.getBeansOfType(Interceptor.class).values();
+ InterceptorCache.interceptors = new ArrayList<>(interceptorCollection);
}
}
diff --git a/mongo-plus-boot-starter/src/main/java/com/anwen/mongo/config/MongoPlusConfiguration.java b/mongo-plus-boot-starter/src/main/java/com/anwen/mongo/config/MongoPlusConfiguration.java
index 04669c58ccc40d71005d84cef1b73866d1c82d98..8b7b431c4237f096cf8b27cd821a87c7f7e45706 100644
--- a/mongo-plus-boot-starter/src/main/java/com/anwen/mongo/config/MongoPlusConfiguration.java
+++ b/mongo-plus-boot-starter/src/main/java/com/anwen/mongo/config/MongoPlusConfiguration.java
@@ -2,11 +2,13 @@ package com.anwen.mongo.config;
import com.anwen.mongo.cache.global.MongoPlusClientCache;
import com.anwen.mongo.convert.CollectionNameConvert;
-import com.anwen.mongo.execute.ExecutorFactory;
-import com.anwen.mongo.interceptor.BaseInterceptor;
+import com.anwen.mongo.listener.BaseListener;
import com.anwen.mongo.manager.MongoPlusClient;
+import com.anwen.mongo.mapper.BaseMapper;
+import com.anwen.mongo.mapper.DefaultBaseMapperImpl;
import com.anwen.mongo.mapper.MongoPlusMapMapper;
import com.anwen.mongo.property.MongoDBCollectionProperty;
+import com.anwen.mongo.property.MongoDBConfigurationProperty;
import com.anwen.mongo.property.MongoDBConnectProperty;
import com.anwen.mongo.toolkit.MongoCollectionUtils;
import com.anwen.mongo.toolkit.UrlJoint;
@@ -26,16 +28,19 @@ import java.util.Collections;
* 连接配置
* @since 2023-02-09 14:27
**/
-@EnableConfigurationProperties(value = {MongoDBConnectProperty.class, MongoDBCollectionProperty.class})
+@EnableConfigurationProperties(value = {MongoDBConnectProperty.class, MongoDBCollectionProperty.class, MongoDBConfigurationProperty.class})
public class MongoPlusConfiguration {
private final MongoDBConnectProperty mongoDBConnectProperty;
private final MongoDBCollectionProperty mongoDBCollectionProperty;
- public MongoPlusConfiguration(MongoDBConnectProperty mongoDBConnectProperty, MongoDBCollectionProperty mongoDBCollectionProperty) {
- this.mongoDBConnectProperty = mongoDBConnectProperty;
- this.mongoDBCollectionProperty = mongoDBCollectionProperty;
+ private final MongoDBConfigurationProperty mongoDBConfigurationProperty;
+
+ public MongoPlusConfiguration(MongoDBConnectProperty mongodbConnectProperty, MongoDBCollectionProperty mongodbCollectionProperty, MongoDBConfigurationProperty mongodbConfigurationProperty) {
+ this.mongoDBConnectProperty = mongodbConnectProperty;
+ this.mongoDBCollectionProperty = mongodbCollectionProperty;
+ this.mongoDBConfigurationProperty = mongodbConfigurationProperty;
}
/**
@@ -45,47 +50,54 @@ public class MongoPlusConfiguration {
*/
@Bean
@ConditionalOnMissingBean
- public MongoClient mongoClient(){
+ public MongoClient mongo(){
return MongoClients.create(MongoClientSettings.builder()
- .applyConnectionString(new ConnectionString(new UrlJoint(mongoDBConnectProperty).jointMongoUrl())).commandListenerList(Collections.singletonList(new BaseInterceptor())).build());
+ .applyConnectionString(new ConnectionString(new UrlJoint(mongoDBConnectProperty).jointMongoUrl())).commandListenerList(Collections.singletonList(new BaseListener())).build());
+ }
+
+ @Bean
+ @ConditionalOnMissingBean(CollectionNameConvert.class)
+ public CollectionNameConvert collectionNameConvert(){
+ return MongoCollectionUtils.build(mongoDBCollectionProperty.getMappingStrategy());
}
@Bean
@ConditionalOnMissingBean(MongoPlusClient.class)
- public MongoPlusClient mongoPlusClient(MongoClient mongoClient){
+ public MongoPlusClient mongoPlusClient(MongoClient mongo,CollectionNameConvert collectionNameConvert){
MongoPlusClient mongoPlusClient = new MongoPlusClient();
- mongoPlusClient.setMongoClient(mongoClient);
+ mongoPlusClient.setMongoClient(mongo);
mongoPlusClient.setBaseProperty(mongoDBConnectProperty);
+ mongoPlusClient.setCollectionNameConvert(collectionNameConvert);
MongoPlusClientCache.mongoPlusClient = mongoPlusClient;
+ if (mongoDBConfigurationProperty.getBanner()){
+ System.out.println("___ ___ ______ _ \n" +
+ "| \\/ | | ___ \\ | \n" +
+ "| . . | ___ _ __ __ _ ___ | |_/ / |_ _ ___ \n" +
+ "| |\\/| |/ _ \\| '_ \\ / _` |/ _ \\| __/| | | | / __|\n" +
+ "| | | | (_) | | | | (_| | (_) | | | | |_| \\__ \\\n" +
+ "\\_| |_/\\___/|_| |_|\\__, |\\___/\\_| |_|\\__,_|___/\n" +
+ " __/ | \n" +
+ " |___/ ");
+ }
return mongoPlusClient;
}
@Bean
- @ConditionalOnMissingBean(CollectionNameConvert.class)
- public CollectionNameConvert collectionNameConvert(){
- return MongoCollectionUtils.build(mongoDBCollectionProperty.getMappingStrategy());
- }
-
- @Bean
- @ConditionalOnMissingBean
- public ExecutorFactory executeFactory(CollectionNameConvert collectionNameConvert){
- return ExecutorFactory.builder()
- .baseProperty(mongoDBConnectProperty)
- .collectionNameConvert(collectionNameConvert)
- .build();
+ @ConditionalOnMissingBean(BaseMapper.class)
+ public BaseMapper baseMapper(MongoPlusClient mongoPlusClient){
+ return new DefaultBaseMapperImpl(mongoPlusClient);
}
@Bean("mongoPlusMapMapper")
@ConditionalOnMissingBean
- public MongoPlusMapMapper mongoPlusMapMapper(ExecutorFactory factory) {
- return new MongoPlusMapMapper(factory);
+ public MongoPlusMapMapper mongoPlusMapMapper(MongoPlusClient mongoPlusClient) {
+ return new MongoPlusMapMapper(mongoPlusClient);
}
@Bean("mongoTransactionalAspect")
- @Deprecated
@ConditionalOnMissingBean
- public MongoTransactionalAspect mongoTransactionalAspect(MongoClient mongoClient) {
- return new MongoTransactionalAspect(mongoClient);
+ public MongoTransactionalAspect mongoTransactionalAspect(MongoClient mongo) {
+ return new MongoTransactionalAspect(mongo);
}
}
diff --git a/mongo-plus-boot-starter/src/main/java/com/anwen/mongo/config/OverrideMongoConfiguration.java b/mongo-plus-boot-starter/src/main/java/com/anwen/mongo/config/OverrideMongoConfiguration.java
index 96140db612d52436cb1a52bd8fa3a4451ce2d592..4c2dc4a35a24570eb8bcffa1c145723de735a7ca 100644
--- a/mongo-plus-boot-starter/src/main/java/com/anwen/mongo/config/OverrideMongoConfiguration.java
+++ b/mongo-plus-boot-starter/src/main/java/com/anwen/mongo/config/OverrideMongoConfiguration.java
@@ -6,13 +6,11 @@ import com.mongodb.client.MongoClient;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
import org.springframework.boot.autoconfigure.mongo.MongoClientSettingsBuilderCustomizer;
-import org.springframework.context.annotation.DependsOn;
/**
* 覆盖MongoTemplate的MongoClient
* @author JiaChaoYang
**/
-@DependsOn("mongoClient")
public class OverrideMongoConfiguration extends MongoAutoConfiguration {
private final MongoClient mongoClient;
diff --git a/mongo-plus-boot-starter/src/main/java/com/anwen/mongo/property/MongoDBConfigurationProperty.java b/mongo-plus-boot-starter/src/main/java/com/anwen/mongo/property/MongoDBConfigurationProperty.java
new file mode 100644
index 0000000000000000000000000000000000000000..45307481acb5953beba75fb22888cc16b53d0e1e
--- /dev/null
+++ b/mongo-plus-boot-starter/src/main/java/com/anwen/mongo/property/MongoDBConfigurationProperty.java
@@ -0,0 +1,27 @@
+package com.anwen.mongo.property;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+/**
+ * configuration属性配置
+ *
+ * @author JiaChaoYang
+ **/
+@ConfigurationProperties(prefix = "mongo-plus.configuration")
+public class MongoDBConfigurationProperty {
+
+ /**
+ * banner打印
+ * @author JiaChaoYang
+ * @date 2024/1/26 21:58
+ */
+ private Boolean banner = true;
+
+ public Boolean getBanner() {
+ return banner;
+ }
+
+ public void setBanner(Boolean banner) {
+ this.banner = banner;
+ }
+}
diff --git a/mongo-plus-boot-starter/src/main/java/com/anwen/mongo/transactional/MongoPlusTransactionalManager.java b/mongo-plus-boot-starter/src/main/java/com/anwen/mongo/transactional/MongoPlusTransactionalManager.java
index 483b4cefa0d75f1f7779d27631a01b748c7ade23..43f6e6ce441124162df0bd4f70ba28330fbf5d20 100644
--- a/mongo-plus-boot-starter/src/main/java/com/anwen/mongo/transactional/MongoPlusTransactionalManager.java
+++ b/mongo-plus-boot-starter/src/main/java/com/anwen/mongo/transactional/MongoPlusTransactionalManager.java
@@ -22,15 +22,15 @@ public class MongoPlusTransactionalManager extends AbstractPlatformTransactionMa
Logger logger = LoggerFactory.getLogger(MongoPlusTransactionalManager.class);
- private final MongoClient mongoClient;
+ private final MongoClient mongo;
- public MongoPlusTransactionalManager(MongoClient mongoClient) {
- this.mongoClient = mongoClient;
+ public MongoPlusTransactionalManager(MongoClient mongo) {
+ this.mongo = mongo;
}
@Override
protected Object doGetTransaction() throws TransactionException {
- return mongoClient.startSession(ClientSessionOptions.builder().causallyConsistent(true).build());
+ return mongo.startSession(ClientSessionOptions.builder().causallyConsistent(true).build());
}
@Override
diff --git a/mongo-plus-boot-starter/src/main/java/com/anwen/mongo/transactional/MongoTransactionManagerAutoConfiguration.java b/mongo-plus-boot-starter/src/main/java/com/anwen/mongo/transactional/MongoTransactionManagerAutoConfiguration.java
index 9dfcce3abd1e3b83b8c0c86d5341a9220b86afb3..7a85411257b47aea8cefa8c0830a523c4e874f2e 100644
--- a/mongo-plus-boot-starter/src/main/java/com/anwen/mongo/transactional/MongoTransactionManagerAutoConfiguration.java
+++ b/mongo-plus-boot-starter/src/main/java/com/anwen/mongo/transactional/MongoTransactionManagerAutoConfiguration.java
@@ -4,7 +4,6 @@ import com.mongodb.client.MongoClient;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.DependsOn;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionManager;
@@ -13,7 +12,6 @@ import org.springframework.transaction.TransactionManager;
*
* @author JiaChaoYang
**/
-@DependsOn("mongoClient")
public class MongoTransactionManagerAutoConfiguration {
private final MongoClient mongoClient;
diff --git a/mongo-plus-boot-starter/src/main/java/com/anwen/mongo/transactional/MongoTransactionalAspect.java b/mongo-plus-boot-starter/src/main/java/com/anwen/mongo/transactional/MongoTransactionalAspect.java
index a8ad4139f3ec97fe40c5c8947c70c0a7b220c499..092a7c736fc1db8736b5b91380e7166a4e71aefc 100644
--- a/mongo-plus-boot-starter/src/main/java/com/anwen/mongo/transactional/MongoTransactionalAspect.java
+++ b/mongo-plus-boot-starter/src/main/java/com/anwen/mongo/transactional/MongoTransactionalAspect.java
@@ -20,11 +20,11 @@ public class MongoTransactionalAspect {
private static final Logger logger = LoggerFactory.getLogger(MongoTransactionalAspect.class);
- public MongoTransactionalAspect(MongoClient mongoClient) {
- this.mongoClient = mongoClient;
- }
+ private final MongoClient mongo;
- private final MongoClient mongoClient;
+ public MongoTransactionalAspect(MongoClient mongo) {
+ this.mongo = mongo;
+ }
@Around("@annotation(com.anwen.mongo.annotation.transactional.MongoTransactional)")
public Object manageTransaction(ProceedingJoinPoint joinPoint) throws Throwable {
@@ -50,7 +50,7 @@ public class MongoTransactionalAspect {
//获取线程中的session
ClientSession session = MongoTransactionContext.getClientSessionContext();
if (session == null) {
- session = mongoClient.startSession(ClientSessionOptions.builder().causallyConsistent(true).build());
+ session = mongo.startSession(ClientSessionOptions.builder().causallyConsistent(true).build());
session.startTransaction();
MongoTransactionStatus status = new MongoTransactionStatus(session);
MongoTransactionContext.setTransactionStatus(status);
diff --git a/mongo-plus-core/pom.xml b/mongo-plus-core/pom.xml
index ee768c0bcdf3260f228b9cc39f7b97a925e617ef..1b5f065f9345c7f0787689730eba0c4407a1996c 100644
--- a/mongo-plus-core/pom.xml
+++ b/mongo-plus-core/pom.xml
@@ -127,7 +127,7 @@
-
+
diff --git a/mongo-plus-core/src/main/java/com/anwen/mongo/conditions/MongoPlusBasicDBObject.java b/mongo-plus-core/src/main/java/com/anwen/mongo/bson/MongoPlusBasicDBObject.java
similarity index 53%
rename from mongo-plus-core/src/main/java/com/anwen/mongo/conditions/MongoPlusBasicDBObject.java
rename to mongo-plus-core/src/main/java/com/anwen/mongo/bson/MongoPlusBasicDBObject.java
index 58bde45fddc2af5863027d969388aac8be6ed1a2..d356b44286c10d470b150fce024b0e79d927bce1 100644
--- a/mongo-plus-core/src/main/java/com/anwen/mongo/conditions/MongoPlusBasicDBObject.java
+++ b/mongo-plus-core/src/main/java/com/anwen/mongo/bson/MongoPlusBasicDBObject.java
@@ -1,15 +1,27 @@
-package com.anwen.mongo.conditions;
+package com.anwen.mongo.bson;
+import com.anwen.mongo.support.SFunction;
import com.mongodb.BasicDBObject;
/**
+ * 支持lambda的BasicDBObject
* @author JiaChaoYang
- * @project mongo-plus
- * @description
* @date 2023-11-14 15:01
**/
public class MongoPlusBasicDBObject extends BasicDBObject {
+ public void put(SFunction key,BasicDBObject value){
+ put(key.getFieldNameLine(),value);
+ }
+
+ public void append(SFunction key,BasicDBObject value){
+ super.append(key.getFieldNameLine(),value);
+ }
+
+ public void get(SFunction key){
+ super.get(key.getFieldNameLine());
+ }
+
public void put(String key,BasicDBObject value){
if (containsKey(key)){
super.put(key,new BasicDBObject((BasicDBObject) get(key)){{
diff --git a/mongo-plus-core/src/main/java/com/anwen/mongo/bson/MongoPlusDocument.java b/mongo-plus-core/src/main/java/com/anwen/mongo/bson/MongoPlusDocument.java
new file mode 100644
index 0000000000000000000000000000000000000000..6eec934a990b17fdede771b80958da3f1893f42c
--- /dev/null
+++ b/mongo-plus-core/src/main/java/com/anwen/mongo/bson/MongoPlusDocument.java
@@ -0,0 +1,42 @@
+package com.anwen.mongo.bson;
+
+import com.anwen.mongo.support.SFunction;
+import org.bson.Document;
+
+import java.util.Map;
+
+/**
+ * 可以使用lambda的Document
+ *
+ * @author JiaChaoYang
+ **/
+public class MongoPlusDocument extends Document {
+
+ public MongoPlusDocument() {
+ }
+
+ public MongoPlusDocument(String key, Object value) {
+ super(key, value);
+ }
+
+ public MongoPlusDocument(Map map) {
+ super(map);
+ }
+
+ public void put(SFunction key, Object value){
+ super.put(key.getFieldNameLine(),value);
+ }
+
+ public void append(SFunction key,Object value){
+ super.append(key.getFieldNameLine(),value);
+ }
+
+ public Object get(SFunction key){
+ return super.get(key.getFieldNameLine());
+ }
+
+ public D get(SFunction key,Class clazz){
+ return super.get(key.getFieldNameLine(),clazz);
+ }
+
+}
diff --git a/mongo-plus-core/src/main/java/com/anwen/mongo/build/GroupBuilder.java b/mongo-plus-core/src/main/java/com/anwen/mongo/build/GroupBuilder.java
index 2b8648795e9a893b04113f7567a79202f8126b55..1f4e5a0dda2bf187fd56ea44c154ceb2e0514897 100644
--- a/mongo-plus-core/src/main/java/com/anwen/mongo/build/GroupBuilder.java
+++ b/mongo-plus-core/src/main/java/com/anwen/mongo/build/GroupBuilder.java
@@ -1,7 +1,7 @@
package com.anwen.mongo.build;
+import com.anwen.mongo.bson.MongoPlusBasicDBObject;
import com.anwen.mongo.conditions.BuildCondition;
-import com.anwen.mongo.conditions.MongoPlusBasicDBObject;
import com.anwen.mongo.conditions.accumulator.Accumulator;
import com.anwen.mongo.constant.SqlOperationConstant;
import com.anwen.mongo.model.GroupField;
diff --git a/mongo-plus-core/src/main/java/com/anwen/mongo/cache/global/InterceptorCache.java b/mongo-plus-core/src/main/java/com/anwen/mongo/cache/global/InterceptorCache.java
index 825280ad0f021867f4fda14d693afa21596ea9d8..7f1a6058fde6d62eab49eb9a5a47b2478e2255ef 100644
--- a/mongo-plus-core/src/main/java/com/anwen/mongo/cache/global/InterceptorCache.java
+++ b/mongo-plus-core/src/main/java/com/anwen/mongo/cache/global/InterceptorCache.java
@@ -6,10 +6,9 @@ import java.util.ArrayList;
import java.util.List;
/**
+ * 拦截器
+ *
* @author JiaChaoYang
- * @project mongo-plus
- * @description 拦截器
- * @date 2023-11-22 17:13
**/
public class InterceptorCache {
diff --git a/mongo-plus-core/src/main/java/com/anwen/mongo/cache/global/ListenerCache.java b/mongo-plus-core/src/main/java/com/anwen/mongo/cache/global/ListenerCache.java
new file mode 100644
index 0000000000000000000000000000000000000000..f8cb392945026a472a3ad2aa98e799e7593d3127
--- /dev/null
+++ b/mongo-plus-core/src/main/java/com/anwen/mongo/cache/global/ListenerCache.java
@@ -0,0 +1,18 @@
+package com.anwen.mongo.cache.global;
+
+import com.anwen.mongo.listener.Listener;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author JiaChaoYang
+ * @project mongo-plus
+ * @description 监听器
+ * @date 2023-11-22 17:13
+ **/
+public class ListenerCache {
+
+ public static List listeners = new ArrayList<>();
+
+}
diff --git a/mongo-plus-core/src/main/java/com/anwen/mongo/conditions/AbstractChainWrapper.java b/mongo-plus-core/src/main/java/com/anwen/mongo/conditions/AbstractChainWrapper.java
index 6b92c8f804e2e0ba69614ac6a2a90d18c4a1266d..18c1b65a7c3c3fce80c4d4ff0094c7c33957c690 100644
--- a/mongo-plus-core/src/main/java/com/anwen/mongo/conditions/AbstractChainWrapper.java
+++ b/mongo-plus-core/src/main/java/com/anwen/mongo/conditions/AbstractChainWrapper.java
@@ -6,10 +6,7 @@ import com.anwen.mongo.conditions.interfaces.condition.CompareCondition;
import com.anwen.mongo.conditions.interfaces.condition.Order;
import com.anwen.mongo.conditions.query.QueryChainWrapper;
import com.anwen.mongo.constant.SqlOperationConstant;
-import com.anwen.mongo.enums.CompareEnum;
-import com.anwen.mongo.enums.LogicTypeEnum;
-import com.anwen.mongo.enums.ProjectionEnum;
-import com.anwen.mongo.enums.TypeEnum;
+import com.anwen.mongo.enums.*;
import com.anwen.mongo.support.SFunction;
import com.mongodb.BasicDBObject;
import org.bson.conversions.Bson;
@@ -24,7 +21,7 @@ import java.util.List;
* @author JiaChaoYang
* @date 2023/6/24/024 0:49
*/
-public class AbstractChainWrapper> implements Compare {
+public abstract class AbstractChainWrapper> implements Compare {
protected final Children typedThis = (Children) this;
@@ -214,6 +211,46 @@ public class AbstractChainWrapper column, Object value) {
+ return condition ? likeLeft(column,value) : typedThis;
+ }
+
+ @Override
+ public Children likeLeft(SFunction column, Object value) {
+ return like(column,"^"+value);
+ }
+
+ @Override
+ public Children likeLeft(boolean condition, String column, Object value) {
+ return condition ? likeLeft(column,value) : typedThis;
+ }
+
+ @Override
+ public Children likeLeft(String column, Object value) {
+ return like(column,"^"+value);
+ }
+
+ @Override
+ public Children likeRight(boolean condition, SFunction column, Object value) {
+ return condition ? likeRight(column,value) : typedThis;
+ }
+
+ @Override
+ public Children likeRight(SFunction column, Object value) {
+ return like(column,value+"$");
+ }
+
+ @Override
+ public Children likeRight(boolean condition, String column, Object value) {
+ return condition ? likeRight(column,value) : typedThis;
+ }
+
+ @Override
+ public Children likeRight(String column, Object value) {
+ return like(column,value+"$");
+ }
+
@Override
public Children in(boolean condition, SFunction column, Collection> valueList) {
return condition ? in(column,valueList) : typedThis;
@@ -577,13 +614,13 @@ public class AbstractChainWrapper compareConditionList){
- this.compareList.add(CompareCondition.builder().type(CompareEnum.QUERY.getKey()).logicType(LogicTypeEnum.OR.getKey()).childCondition(compareConditionList).build());
+ this.compareList.add(CompareCondition.builder().condition(QueryOperatorEnum.OR.getValue()).type(CompareEnum.QUERY.getKey()).logicType(LogicTypeEnum.OR.getKey()).childCondition(compareConditionList).build());
return typedThis;
}
public Children getBaseAndCondition(List compareConditionList){
CompareCondition compareCondition = new CompareCondition();
- compareCondition.setCondition("and");
+ compareCondition.setCondition(QueryOperatorEnum.AND.getValue());
compareCondition.setType(CompareEnum.QUERY.getKey());
compareCondition.setLogicType(LogicTypeEnum.AND.getKey());
compareCondition.setChildCondition(compareConditionList);
diff --git a/mongo-plus-core/src/main/java/com/anwen/mongo/conditions/BuildCondition.java b/mongo-plus-core/src/main/java/com/anwen/mongo/conditions/BuildCondition.java
index e5712766b1a0d498669d99446362ff6fe9dd61ed..3edc3ae523807b4b34d3eece0f19e0ff46740133 100644
--- a/mongo-plus-core/src/main/java/com/anwen/mongo/conditions/BuildCondition.java
+++ b/mongo-plus-core/src/main/java/com/anwen/mongo/conditions/BuildCondition.java
@@ -1,5 +1,6 @@
package com.anwen.mongo.conditions;
+import com.anwen.mongo.bson.MongoPlusBasicDBObject;
import com.anwen.mongo.conditions.accumulator.Accumulator;
import com.anwen.mongo.conditions.interfaces.aggregate.pipeline.AddFields;
import com.anwen.mongo.conditions.interfaces.aggregate.pipeline.Projection;
@@ -15,7 +16,6 @@ import com.anwen.mongo.toolkit.CollUtil;
import com.anwen.mongo.toolkit.ObjectIdUtil;
import com.anwen.mongo.toolkit.StringUtils;
import com.mongodb.BasicDBObject;
-import org.bson.types.ObjectId;
import java.util.*;
import java.util.stream.Collectors;
@@ -57,6 +57,11 @@ public class BuildCondition {
compare.setChildCondition(Collections.singletonList(compare));
}
put(SpecialConditionEnum.OR.getCondition(), buildOrQueryCondition(compare.getChildCondition()));
+ } else if (Objects.equals(compare.getLogicType(), LogicTypeEnum.AND.getKey())) {
+ if (null == compare.getChildCondition() || compare.getChildCondition().isEmpty()) {
+ compare.setChildCondition(Collections.singletonList(compare));
+ }
+ put(SpecialConditionEnum.AND.getCondition(), buildOrQueryCondition(compare.getChildCondition()));
} else if (Objects.equals(compare.getLogicType(), LogicTypeEnum.NOR.getKey())) {
put(SpecialConditionEnum.NOR.getCondition(), buildQueryCondition(compare.getChildCondition()));
} else if (Objects.equals(compare.getLogicType(), LogicTypeEnum.ELEMMATCH.getKey())) {
@@ -86,27 +91,36 @@ public class BuildCondition {
*/
public static List buildOrQueryCondition(List compareConditionList) {
return new ArrayList(){{
- compareConditionList.forEach(compare -> {
- add(new MongoPlusBasicDBObject(){{
- if (Objects.equals(compare.getCondition(), QueryOperatorEnum.LIKE.getValue()) && StringUtils.isNotBlank(String.valueOf(compare.getValue()))) {
- put(compare.getColumn(), new BasicDBObject(SpecialConditionEnum.REGEX.getCondition(), compare.getValue()));
- } else if (Objects.equals(compare.getCondition(), QueryOperatorEnum.AND.getValue())) {
- add(buildQueryCondition(compare.getChildCondition()));
- } else if (Objects.equals(compare.getCondition(), QueryOperatorEnum.TEXT.getValue())) {
- put(SpecialConditionEnum.TEXT.getCondition(), new BasicDBObject(SpecialConditionEnum.SEARCH.getCondition(), compare.getValue()));
- IndexConstant.createIndex = compare.getColumn();
- } else if (Objects.equals(compare.getColumn(), SqlOperationConstant._ID)){
- //如果是objectId
- if (ObjectId.isValid(String.valueOf(compare.getValue()))){
- put(compare.getColumn(),new BasicDBObject("$"+compare.getCondition(),new ObjectId(String.valueOf(compare.getValue()))));
- } else {
- put(compare.getColumn(),new BasicDBObject("$"+compare.getCondition(),String.valueOf(compare.getValue())));
- }
+ compareConditionList.forEach(compare -> add(new MongoPlusBasicDBObject(){{
+ if (compare.getCondition().contains(QueryOperatorEnum.LIKE.getValue()) && StringUtils.isNotBlank(String.valueOf(compare.getValue()))) {
+ put(compare.getColumn(), new BasicDBObject(SpecialConditionEnum.REGEX.getCondition(), compare.getValue()));
+ } else if (Objects.equals(compare.getCondition(), QueryOperatorEnum.OR.getValue())) {
+ if (null == compare.getChildCondition() || compare.getChildCondition().isEmpty()) {
+ compare.setChildCondition(Collections.singletonList(compare));
+ }
+ put(SpecialConditionEnum.OR.getCondition(), buildOrQueryCondition(compare.getChildCondition()));
+ } else if (Objects.equals(compare.getCondition(), QueryOperatorEnum.AND.getValue())) {
+ if (null == compare.getChildCondition() || compare.getChildCondition().isEmpty()) {
+ compare.setChildCondition(Collections.singletonList(compare));
+ }
+ put(SpecialConditionEnum.AND.getCondition(), buildOrQueryCondition(compare.getChildCondition()));
+ } else if (Objects.equals(compare.getLogicType(), LogicTypeEnum.NOR.getKey())) {
+ put(SpecialConditionEnum.NOR.getCondition(), buildQueryCondition(compare.getChildCondition()));
+ } else if (Objects.equals(compare.getLogicType(), LogicTypeEnum.ELEMMATCH.getKey())) {
+ put(compare.getColumn(),new BasicDBObject(SpecialConditionEnum.ELEM_MATCH.getCondition(),buildQueryCondition(compare.getChildCondition())));
+ } else if (Objects.equals(compare.getCondition(), QueryOperatorEnum.TEXT.getValue())) {
+ put(SpecialConditionEnum.TEXT.getCondition(), new BasicDBObject(SpecialConditionEnum.SEARCH.getCondition(), compare.getValue()));
+ IndexConstant.createIndex = compare.getColumn();
+ } else if (Objects.equals(compare.getColumn(), SqlOperationConstant._ID)) {
+ if (SpecialConditionEnum.IN.getCondition().equals("$" + compare.getCondition())) {
+ put(compare.getColumn(), new BasicDBObject("$" + compare.getCondition(), ObjectIdUtil.convertObjectId((Collection>)compare.getValue())));
} else {
- put(compare.getColumn(), new BasicDBObject("$" + compare.getCondition(), compare.getValue()));
+ put(compare.getColumn(), new BasicDBObject("$" + compare.getCondition(), ObjectIdUtil.convertObjectId(compare.getValue())));
}
- }});
- });
+ } else {
+ put(compare.getColumn(), new BasicDBObject("$" + compare.getCondition(), compare.getValue()));
+ }
+ }}));
}};
}
diff --git a/mongo-plus-core/src/main/java/com/anwen/mongo/conditions/aggregate/LambdaAggregateChainWrapper.java b/mongo-plus-core/src/main/java/com/anwen/mongo/conditions/aggregate/LambdaAggregateChainWrapper.java
index cbe6bbba03030b8c78211934305111ceaefd49c5..4c3b6957da86c0b0f08ad4760f35daf734203181 100644
--- a/mongo-plus-core/src/main/java/com/anwen/mongo/conditions/aggregate/LambdaAggregateChainWrapper.java
+++ b/mongo-plus-core/src/main/java/com/anwen/mongo/conditions/aggregate/LambdaAggregateChainWrapper.java
@@ -1,6 +1,6 @@
package com.anwen.mongo.conditions.aggregate;
-import com.anwen.mongo.execute.ExecutorFactory;
+import com.anwen.mongo.mapper.BaseMapper;
import java.util.List;
@@ -9,20 +9,17 @@ import java.util.List;
**/
public class LambdaAggregateChainWrapper extends AggregateChainWrapper> implements ChainAggregate {
- private final ExecutorFactory factory;
-
- private final String database;
+ private final BaseMapper baseMapper;
private final Class clazz;
- public LambdaAggregateChainWrapper(ExecutorFactory factory,Class clazz,String database) {
- this.factory = factory;
+ public LambdaAggregateChainWrapper(BaseMapper baseMapper, Class clazz) {
+ this.baseMapper = baseMapper;
this.clazz = clazz;
- this.database = database;
}
@Override
public List list() {
- return factory.getExecute(database).aggregateList(super.baseAggregateList,super.getBasicDBObjectList(),super.getOptionsBasicDBObject(),clazz);
+ return baseMapper.aggregateList(this,clazz);
}
}
diff --git a/mongo-plus-core/src/main/java/com/anwen/mongo/conditions/interfaces/Compare.java b/mongo-plus-core/src/main/java/com/anwen/mongo/conditions/interfaces/Compare.java
index 66668e57362039dff8d0cdee8d62acef4a2438c6..4e592f29a0d81dc9fd24e3bd2c8b5c6ea87838b8 100644
--- a/mongo-plus-core/src/main/java/com/anwen/mongo/conditions/interfaces/Compare.java
+++ b/mongo-plus-core/src/main/java/com/anwen/mongo/conditions/interfaces/Compare.java
@@ -311,6 +311,90 @@ public interface Compare extends Serializable {
*/
Children like(String column, Object value);
+ /**
+ * 左包含(模糊查询)
+ * @param condition 判断如果为true,则加入此条件,可做判空,即不为空就加入这个条件
+ * @param column 列名、字段名
+ * @param value 值
+ * @return Children
+ * @author JiaChaoYang
+ * @date 2023/6/20/020
+ */
+ Children likeLeft(boolean condition , SFunction column, Object value);
+
+ /**
+ * 左包含(模糊查询)
+ * @param column 列名、字段名,lambda方式
+ * @param value 值
+ * @return Children
+ * @author JiaChaoYang
+ * @date 2023/6/20/020
+ */
+ Children likeLeft(SFunction column, Object value);
+
+ /**
+ * 左包含(模糊查询)
+ * @param condition 判断如果为true,则加入此条件,可做判空,即不为空就加入这个条件
+ * @param column 列名、字段名
+ * @param value 值
+ * @return Children
+ * @author JiaChaoYang
+ * @date 2023/6/20/020
+ */
+ Children likeLeft(boolean condition , String column, Object value);
+
+ /**
+ * 左包含(模糊查询)
+ * @param column 列名、字段名,lambda方式
+ * @param value 值
+ * @return Children
+ * @author JiaChaoYang
+ * @date 2023/6/20/020
+ */
+ Children likeLeft(String column, Object value);
+
+ /**
+ * 右包含(模糊查询)
+ * @param condition 判断如果为true,则加入此条件,可做判空,即不为空就加入这个条件
+ * @param column 列名、字段名
+ * @param value 值
+ * @return Children
+ * @author JiaChaoYang
+ * @date 2023/6/20/020
+ */
+ Children likeRight(boolean condition , SFunction column, Object value);
+
+ /**
+ * 右包含(模糊查询)
+ * @param column 列名、字段名,lambda方式
+ * @param value 值
+ * @return Children
+ * @author JiaChaoYang
+ * @date 2023/6/20/020
+ */
+ Children likeRight(SFunction column, Object value);
+
+ /**
+ * 右包含(模糊查询)
+ * @param condition 判断如果为true,则加入此条件,可做判空,即不为空就加入这个条件
+ * @param column 列名、字段名
+ * @param value 值
+ * @return Children
+ * @author JiaChaoYang
+ * @date 2023/6/20/020
+ */
+ Children likeRight(boolean condition , String column, Object value);
+
+ /**
+ * 右包含(模糊查询)
+ * @param column 列名、字段名,lambda方式
+ * @param value 值
+ * @return Children
+ * @author JiaChaoYang
+ * @date 2023/6/20/020
+ */
+ Children likeRight(String column, Object value);
+
/**
* 多值查询
* @param condition 判断如果为true,则加入此条件,可做判空,即不为空就加入这个条件
diff --git a/mongo-plus-core/src/main/java/com/anwen/mongo/conditions/interfaces/Inject/InjectQuery.java b/mongo-plus-core/src/main/java/com/anwen/mongo/conditions/interfaces/Inject/InjectQuery.java
index d0a8e47cf85678f3d4a9a601f5903289c9688fe9..40fa7ed5dbbbd5e11562eba0fa90cbdb8c0b310d 100644
--- a/mongo-plus-core/src/main/java/com/anwen/mongo/conditions/interfaces/Inject/InjectQuery.java
+++ b/mongo-plus-core/src/main/java/com/anwen/mongo/conditions/interfaces/Inject/InjectQuery.java
@@ -407,6 +407,39 @@ public interface InjectQuery extends CommInjectQuery {
*/
List