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;
}
}
}