All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.anwen.mongo.conn.CollectionManager Maven / Gradle / Ivy

There is a newer version: 2.1.6.1
Show newest version
package com.anwen.mongo.conn;

import com.anwen.mongo.convert.CollectionNameConvert;
import com.anwen.mongo.toolkit.ClassTypeUtil;
import com.anwen.mongo.toolkit.codec.RegisterCodecUtil;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoCollection;
import org.bson.Document;

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 连接管理器
 *
 * @author JiaChaoYang
 * @project mongo-plus
 * @date 2023-12-28 11:13
 **/
public class CollectionManager {

    /**
     * 缓存mongoCollection
     * @author JiaChaoYang
     * @date 2023/12/28 10:58
     */
    private final Map> collectionMap = new ConcurrentHashMap<>();

    private final MongoClient mongoClient;

    private final CollectionNameConvert collectionNameConvert;

    private final String database;

    public CollectionManager(MongoClient mongoClient, CollectionNameConvert collectionNameConvert, String database) {
        this.mongoClient = mongoClient;
        this.collectionNameConvert = collectionNameConvert;
        this.database = database;
    }

    /**
     * 设置一个连接
     * @author JiaChaoYang
     * @date 2023/12/28 11:20
    */
    public void setCollectionMap(String key,MongoCollection value){
        collectionMap.put(key,value);
    }

    private  MongoCollection getCollection(T entity) {
        return getCollection(ClassTypeUtil.getClass(entity)).withCodecRegistry(RegisterCodecUtil.registerCodec(entity));
    }

    private MongoCollection getCollection(String collectionName,Map map){
        return getCollection(collectionName).withCodecRegistry(RegisterCodecUtil.registerCodec(map));
    }

    public MongoCollection getCollection(Class clazz) {
        String collectionName = this.collectionNameConvert.convert(clazz);
        return getCollection(collectionName);
    }

    public MongoCollection getCollection(String collectionName) {
        MongoCollection mongoCollection;
        // 检查连接是否需要重新创建
        if (!this.collectionMap.containsKey(collectionName)) {
            mongoCollection = new ConnectMongoDB(mongoClient, database, collectionName).open();
            this.collectionMap.put(collectionName, mongoCollection);
        }else {
            mongoCollection = this.collectionMap.get(collectionName);
        }
        return mongoCollection.withCodecRegistry(RegisterCodecUtil.getCodecCacheAndDefault());
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy