MongoHelper

warning: 这篇文章距离上次修改已过752天,其中的内容可能已经有所变动。

MongoHelper.java

package test;

import com.mongodb.MongoClient;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;
import org.bson.BsonDocument;
import org.bson.Document;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MongoHelper {
    /**
     * 服务器IP
     */
    private static final String HOST = "localhost";
    /**
     * 端口号
     */
    private static final int PORT = 27017;
    /**
     * 数据库名称
     */
    private static final String DB_NAME = "testdb";
    /**
     * 用户名
     */
    private static final String USERNAME = "";
    /**
     * 密码
     */
    private static final String PASSWORD = "";

    private MongoClient mongoClient;
    private MongoDatabase mongoDatabase;

    private volatile static MongoHelper mongoHelper;

    private MongoHelper() {
    }

    /**
     * 双重锁单例模式
     * 线程安全,延迟初始化。这种方式采用双锁机制,安全且在多线程情况下能保持高性能。
     *
     * @return MongoHelper实例
     */
    public static MongoHelper getInstance() {
        if (mongoHelper == null) {
            synchronized (MongoHelper.class) {
                if (mongoHelper == null) {
                    mongoHelper = new MongoHelper();
                }
            }
        }
        return mongoHelper;
    }

    /**
     * 连接MongoDB服务
     *
     * @return
     */
    public MongoClient getMongoClient() {
        mongoClient = null;
        try {
            //链接到mongodb服务
            mongoClient = new MongoClient(HOST, PORT);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return mongoClient;
    }

    /**
     * 获取数据库信息
     *
     * @param mongoClient 数据库
     * @return
     */
    private MongoDatabase getMongoDatabse(MongoClient mongoClient) {
        mongoDatabase = null;
        try {
            if (mongoClient != null) {
                mongoDatabase = mongoClient.getDatabase(DB_NAME);
            } else {
                throw new RuntimeException("MongoClient不能为空");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return mongoDatabase;
    }

    /**
     * 获取数据库信息
     *
     * @return
     */
    public MongoDatabase getMongoDatabase() {
        MongoDatabase mongoDatabase = null;
        try {
            //连接到数据库
            mongoDatabase = getMongoDatabse(getMongoClient());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return mongoDatabase;
    }

    /**
     * 增(单数据)
     *
     * @param collectionName 表名
     * @param document       JSON数据
     */
    public void insertOne(String collectionName, Document document) {
        try {
            MongoDatabase md = this.getMongoDatabase();
            md.getCollection(collectionName).insertOne(document);
            System.out.println("单条数据插入成功!");
            closeMongoClient();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 增(多数据)
     *
     * @param collectionName 表名
     * @param documentList   JSON数据
     */
    public void insertMany(String collectionName, List<Document> documentList) {
        try {
            MongoDatabase md = this.getMongoDatabase();
            md.getCollection(collectionName).insertMany(documentList);
            System.out.println(documentList.size() + "条数据插入成功!");
            closeMongoClient();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 删(单)
     *
     * @param collectionName 表名
     * @param key            键
     * @param value          值
     */
    public void deleteOne(String collectionName, String key, Object value) {
        try {
            MongoDatabase md = this.getMongoDatabase();
            md.getCollection(collectionName).deleteOne(Filters.eq(key, value));
            System.out.println("单条数据删除成功!");
            closeMongoClient();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 删(多)
     *
     * @param collectionName 表名
     * @param key            键
     * @param value          值
     */
    public void deleteMany(String collectionName, String key, Object value) {
        MongoDatabase md = this.getMongoDatabase();
        md.getCollection(collectionName).deleteMany(Filters.eq(key, value));
        System.out.println("多条数据删除成功!");
        closeMongoClient();
    }

    /**
     * 查(全部)
     *
     * @param collectionName 表名
     */
    public void selectAll(String collectionName) {
        MongoDatabase md = this.getMongoDatabase();
        FindIterable iterable = md.getCollection(collectionName).find();
        MongoCursor cusor = iterable.iterator();
        while (cusor.hasNext()) {
            System.out.println(cusor.next());
        }
    }

    /**
     * 关闭连接释放资源
     */
    private void closeMongoClient() {
        if (this.mongoDatabase != null) {
            this.mongoDatabase = null;
        }
        if (this.mongoClient != null) {
            this.mongoClient = null;
        }
    }

    /**
     * 关闭连接释放资源
     *
     * @param mongoDatabase
     * @param mongoClient
     */
    public void closeMongoClient(MongoDatabase mongoDatabase, MongoClient mongoClient) {
        if (mongoDatabase != null) {
            mongoDatabase = null;
        }
        if (mongoClient != null) {
            mongoClient = null;
        }
    }
}

添加新评论