public class MongoDBFactory {
/**私有无参构造**/
private MongoDBFactory (){ super ();}
/**内部静态私有类**/
private static final class SingletonHolder {
private static MongoDBFactory instance = new MongoDBFactory();
}
/**获取单例**/
public static MongoDBFactory me (){
return SingletonHolder.instance;
}
/**连接客户端,线程安全**/
private MongoClient client;
/**默认连接库**/
public final static String DefaultDatabase = Configurator.getString("mongodb_database" );
/**初始化客户端,在适当的时机调用,来达到参数配置**/
public void initClient (String url) throws Exception{
try {
Builder options = new MongoClientOptions.Builder();
options.connectionsPerHost(300 );
options.connectTimeout(15000 );
options.maxWaitTime(5000 );
options.socketTimeout(0 );
options.threadsAllowedToBlockForConnectionMultiplier(5000 );
MongoClientURI uri = new MongoClientURI(url, options);
this .client = new MongoClient(uri);
}catch (Exception e){
e.printStackTrace();
}
}
public void initClient () throws Exception {
initClient(Configurator.getString("mongodb_url" ));
}
/**
* 判断是否已连接
*/
public boolean isConnect (){
return this .client != null ;
}
public MongoDBConnection openConnection () throws Exception{
if (this .client == null ) throw new Exception("连接不存在." );
return new MongoDBConnection(this .client);
}
public void closeConnection (MongoDBConnection connection){
if (connection != null ){
connection.close();
}
}
public synchronized void resetMongoClient (String url, Builder options){
closeMongoClient();
this .client = new MongoClient(new MongoClientURI(url, options));
}
public synchronized void closeMongoClient (){
if (this .client != null ){
this .client.close();
this .client = null ;
}
}
}
public class MongoDBConnection {
private MongoClient mongoClient;
public MongoDBConnection (MongoClient mongoClient){
this .mongoClient = mongoClient;
}
public MongoClient getMongoClient (){
return this .mongoClient;
}
public MongoDatabase getDatabase (String databaseName){
if (IHelper.isEmpty(databaseName)) return null ;
return this .mongoClient.getDatabase(databaseName);
}
public MongoCollection<Document> getCollection (String databaseName, String collectionName){
if (IHelper.isEmpty(databaseName)) return null ;
if (IHelper.isEmpty(collectionName)) return null ;
MongoDatabase mdb = this .getDatabase(databaseName);
if (mdb != null ){
return mdb.getCollection(collectionName);
}
return null ;
}
public List<String> listCollectionNames (String databaseName) {
List<String> list = new ArrayList<String>();
if (!IHelper.isEmpty(databaseName)){
MongoDatabase mdb = this .getDatabase(databaseName);
if (mdb != null ){
MongoIterable<String> colls = mdb.listCollectionNames();
for (String collName : colls) {
list.add(collName);
}
}
}
return list;
}
public MongoIterable<String> listDatabaseNames () {
MongoIterable<String> mi = mongoClient.listDatabaseNames();
return mi;
}
public void dropDatabase (String databaseName) {
MongoDatabase mdb = this .getDatabase(databaseName);
if (mdb != null ){
mdb.drop();
}
}
public Document findById (MongoCollection<Document> coll, Object id) {
Document myDoc = coll.find(Filters.eq("_id" , id)).first();
return myDoc;
}
public Document findByObjectId (MongoCollection<Document> coll, String id) {
ObjectId _idobj = null ;
try {
_idobj = new ObjectId(id);
} catch (Exception e) {
return null ;
}
Document myDoc = coll.find(Filters.eq("_id" , _idobj)).first();
return myDoc;
}
public int getCount (MongoCollection<Document> coll) {
int count = (int ) coll.count();
return count;
}
public MongoCursor<Document> find (MongoCollection<Document> coll, Bson filter) {
return coll.find(filter).iterator();
}
public MongoCursor<Document> findByPage (MongoCollection<Document> coll, Bson filter, int pageNo, int pageSize) {
Bson orderBy = new BasicDBObject("_id" , 1 );
return this .findByPage(coll, orderBy, filter, pageNo, pageSize);
}
public MongoCursor<Document> findByPage (MongoCollection<Document> coll, Bson orderBy, Bson filter, int pageNo, int pageSize) {
return coll.find(filter).sort(orderBy).skip((pageNo - 1 ) * pageSize).limit(pageSize).iterator();
}
public int deleteById (MongoCollection<Document> coll, String id) {
int count = 0 ;
Bson filter = Filters.eq("_id" , id);
DeleteResult deleteResult = coll.deleteOne(filter);
count = (int ) deleteResult.getDeletedCount();
return count;
}
public Document updateById (MongoCollection<Document> coll, String id, Document newdoc) {
Bson filter = Filters.eq("_id" ,id);
coll.updateOne(filter, new Document("$set" , newdoc));
return newdoc;
}
public Document replaceById (MongoCollection<Document> coll, String id, Document newdoc) {
ObjectId _idobj = null ;
try {
byte [] bytes = id.getBytes();
int len = bytes.length - 12 ;
if (len < 0 ){
bytes = ByteHelper.merge(new byte [-len],bytes);
}
_idobj = new ObjectId(bytes);
Bson filter = Filters.eq("_id" , _idobj);
coll.replaceOne(filter, newdoc);
return newdoc;
} catch (Exception e) {
return null ;
}
}
public void insertById (MongoCollection<Document> coll, String id, Document newdoc) {
coll.insertOne(newdoc);
}
public void insertById (MongoCollection<Document> coll, Document newdoc) {
coll.insertOne(newdoc);
}
public void dropCollection (String databaseName, String collectionName) {
MongoCollection<Document> mc = this .getCollection(databaseName, collectionName);
if (mc != null ){
mc.drop();
}
}
public void close (){
}
}