亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Java單例模式下的MongoDB數據庫操作工具類

2024-07-13 10:16:05
字體:
來源:轉載
供稿:網友

本文實例講述了Java單例模式下的MongoDB數據庫操作工具類。分享給大家供大家參考,具體如下:

我經常對MongoDB進行一些基礎操作,將這些常用操作合并到一個工具類中,方便自己開發使用。

沒用Spring Data、Morphia等框架是為了減少學習、維護成本,另外自己直接JDBC方式的話可以更靈活,為自己以后的積累留一個腳印。

JAVA驅動版本:

<!-- MongoDB驅動 --><dependency>  <groupId>org.mongodb</groupId>  <artifactId>mongo-java-driver</artifactId>  <version>3.0.2</version></dependency>

工具類代碼如下:

package utils;import java.util.ArrayList;import java.util.List;import org.apache.commons.configuration.CompositeConfiguration;import org.apache.commons.configuration.ConfigurationException;import org.apache.commons.configuration.PropertiesConfiguration;import org.bson.Document;import org.bson.conversions.Bson;import org.bson.types.ObjectId;import com.mongodb.BasicDBObject;import com.mongodb.MongoClient;import com.mongodb.MongoClientOptions;import com.mongodb.MongoClientOptions.Builder;import com.mongodb.WriteConcern;import com.mongodb.client.MongoCollection;import com.mongodb.client.MongoCursor;import com.mongodb.client.MongoDatabase;import com.mongodb.client.MongoIterable;import com.mongodb.client.model.Filters;import com.mongodb.client.result.DeleteResult;/** * MongoDB工具類 Mongo實例代表了一個數據庫連接池,即使在多線程的環境中,一個Mongo實例對我們來說已經足夠了<br> * 注意Mongo已經實現了連接池,并且是線程安全的。 <br> * 設計為單例模式, 因 MongoDB的Java驅動是線程安全的,對于一般的應用,只要一個Mongo實例即可,<br> * Mongo有個內置的連接池(默認為10個) 對于有大量寫和讀的環境中,為了確保在一個Session中使用同一個DB時,<br> * DB和DBCollection是絕對線程安全的<br> * * @author zhoulingfei * @date 2015-5-29 上午11:49:49 * @version 0.0.0 * @Copyright (c)1997-2015 NavInfo Co.Ltd. All Rights Reserved. */public enum MongoDBUtil {  /**   * 定義一個枚舉的元素,它代表此類的一個實例   */  instance;  private MongoClient mongoClient;  static {    System.out.println("===============MongoDBUtil初始化========================");    CompositeConfiguration config = new CompositeConfiguration();    try {      config.addConfiguration(new PropertiesConfiguration("mongodb.properties"));    } catch (ConfigurationException e) {      e.printStackTrace();    }    // 從配置文件中獲取屬性值    String ip = config.getString("host");    int port = config.getInt("port");    instance.mongoClient = new MongoClient(ip, port);    // or, to connect to a replica set, with auto-discovery of the primary, supply a seed list of members    // List<ServerAddress> listHost = Arrays.asList(new ServerAddress("localhost", 27017),new ServerAddress("localhost", 27018));    // instance.mongoClient = new MongoClient(listHost);    // 大部分用戶使用mongodb都在安全內網下,但如果將mongodb設為安全驗證模式,就需要在客戶端提供用戶名和密碼:    // boolean auth = db.authenticate(myUserName, myPassword);    Builder options = new MongoClientOptions.Builder();    // options.autoConnectRetry(true);// 自動重連true    // options.maxAutoConnectRetryTime(10); // the maximum auto connect retry time    options.connectionsPerHost(300);// 連接池設置為300個連接,默認為100    options.connectTimeout(15000);// 連接超時,推薦>3000毫秒    options.maxWaitTime(5000); //    options.socketTimeout(0);// 套接字超時時間,0無限制    options.threadsAllowedToBlockForConnectionMultiplier(5000);// 線程隊列數,如果連接線程排滿了隊列就會拋出“Out of semaphores to get db”錯誤。    options.writeConcern(WriteConcern.SAFE);//    options.build();  }  // ------------------------------------共用方法---------------------------------------------------  /**   * 獲取DB實例 - 指定DB   *   * @param dbName   * @return   */  public MongoDatabase getDB(String dbName) {    if (dbName != null && !"".equals(dbName)) {      MongoDatabase database = mongoClient.getDatabase(dbName);      return database;    }    return null;  }  /**   * 獲取collection對象 - 指定Collection   *   * @param collName   * @return   */  public MongoCollection<Document> getCollection(String dbName, String collName) {    if (null == collName || "".equals(collName)) {      return null;    }    if (null == dbName || "".equals(dbName)) {      return null;    }    MongoCollection<Document> collection = mongoClient.getDatabase(dbName).getCollection(collName);    return collection;  }  /**   * 查詢DB下的所有表名   */  public List<String> getAllCollections(String dbName) {    MongoIterable<String> colls = getDB(dbName).listCollectionNames();    List<String> _list = new ArrayList<String>();    for (String s : colls) {      _list.add(s);    }    return _list;  }  /**   * 獲取所有數據庫名稱列表   *   * @return   */  public MongoIterable<String> getAllDBNames() {    MongoIterable<String> s = mongoClient.listDatabaseNames();    return s;  }  /**   * 刪除一個數據庫   */  public void dropDB(String dbName) {    getDB(dbName).drop();  }  /**   * 查找對象 - 根據主鍵_id   *   * @param collection   * @param id   * @return   */  public Document findById(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 coll.find(filter).sort(orderBy).skip((pageNo - 1) * pageSize).limit(pageSize).iterator();  }  /**   * 通過ID刪除   *   * @param coll   * @param id   * @return   */  public int deleteById(MongoCollection<Document> coll, String id) {    int count = 0;    ObjectId _id = null;    try {      _id = new ObjectId(id);    } catch (Exception e) {      return 0;    }    Bson filter = Filters.eq("_id", _id);    DeleteResult deleteResult = coll.deleteOne(filter);    count = (int) deleteResult.getDeletedCount();    return count;  }  /**   * FIXME   *   * @param coll   * @param id   * @param newdoc   * @return   */  public Document updateById(MongoCollection<Document> coll, String id, Document newdoc) {    ObjectId _idobj = null;    try {      _idobj = new ObjectId(id);    } catch (Exception e) {      return null;    }    Bson filter = Filters.eq("_id", _idobj);    // coll.replaceOne(filter, newdoc); // 完全替代    coll.updateOne(filter, new Document("$set", newdoc));    return newdoc;  }  public void dropCollection(String dbName, String collName) {    getDB(dbName).getCollection(collName).drop();  }  /**   * 關閉Mongodb   */  public void close() {    if (mongoClient != null) {      mongoClient.close();      mongoClient = null;    }  }  /**   * 測試入口   *   * @param args   */  public static void main(String[] args) {    String dbName = "GC_MAP_DISPLAY_DB";    String collName = "COMMUNITY_BJ";    MongoCollection<Document> coll = MongoDBUtil.instance.getCollection(dbName, collName);    // 插入多條    // for (int i = 1; i <= 4; i++) {    // Document doc = new Document();    // doc.put("name", "zhoulf");    // doc.put("school", "NEFU" + i);    // Document interests = new Document();    // interests.put("game", "game" + i);    // interests.put("ball", "ball" + i);    // doc.put("interests", interests);    // coll.insertOne(doc);    // }    // // 根據ID查詢    // String id = "556925f34711371df0ddfd4b";    // Document doc = MongoDBUtil2.instance.findById(coll, id);    // System.out.println(doc);    // 查詢多個    // MongoCursor<Document> cursor1 = coll.find(Filters.eq("name", "zhoulf")).iterator();    // while (cursor1.hasNext()) {    // org.bson.Document _doc = (Document) cursor1.next();    // System.out.println(_doc.toString());    // }    // cursor1.close();    // 查詢多個    // MongoCursor<Person> cursor2 = coll.find(Person.class).iterator();    // 刪除數據庫    // MongoDBUtil2.instance.dropDB("testdb");    // 刪除表    // MongoDBUtil2.instance.dropCollection(dbName, collName);    // 修改數據    // String id = "556949504711371c60601b5a";    // Document newdoc = new Document();    // newdoc.put("name", "時候");    // MongoDBUtil.instance.updateById(coll, id, newdoc);    // 統計表    // System.out.println(MongoDBUtil.instance.getCount(coll));    // 查詢所有    Bson filter = Filters.eq("count", 0);    MongoDBUtil.instance.find(coll, filter);  }}

希望本文所述對大家java程序設計有所幫助。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲四色影视在线观看| 色综合天天狠天天透天天伊人| 日韩av网址在线| 成人国产精品久久久| 亚洲欧美日韩精品久久亚洲区| 亚洲毛片在线观看.| 国产在线观看一区二区三区| 日韩精品欧美激情| 国产成人avxxxxx在线看| 久久久爽爽爽美女图片| 日韩暖暖在线视频| 日韩欧美高清视频| 97精品免费视频| 中文字幕一区日韩电影| 欧美一性一乱一交一视频| 国产精品高精视频免费| 日韩av网站大全| 91网在线免费观看| 欧美视频专区一二在线观看| 91午夜理伦私人影院| 亚洲精品电影在线观看| 国产免费一区二区三区香蕉精| 欧美日韩中文字幕在线| 最新国产精品亚洲| 国产男女猛烈无遮挡91| 亚洲片国产一区一级在线观看| 日韩精品欧美激情| 91极品视频在线| 久久综合久久88| 国产精品一区二区久久久久| 岛国av午夜精品| 亚洲激情在线观看视频免费| 国产亚洲精品久久久久久牛牛| 国产日韩专区在线| 国产精品草莓在线免费观看| 亚洲人成绝费网站色www| 亚洲国产黄色片| 国产精品影院在线观看| 久久久之久亚州精品露出| 欧美成人一区二区三区电影| 久久精品99久久久久久久久| 国产精品美女视频网站| 亚洲欧美一区二区三区久久| 欧美性在线观看| 国产精品视频免费观看www| 中文字幕国内精品| 国产精品一区二区在线| 精品久久久久久久久久国产| 91国内精品久久| 日韩亚洲欧美中文在线| 91高清免费在线观看| 亚洲欧美日韩国产成人| 91精品国产综合久久男男| 国产精品入口福利| 91sao在线观看国产| 91免费视频国产| 亚洲国产另类久久精品| 色噜噜国产精品视频一区二区| 国产成人福利夜色影视| 亚洲色图五月天| 欧美体内谢she精2性欧美| 欧美成人免费在线观看| 亚洲午夜精品久久久久久性色| 亚洲国产精品资源| 欧美黑人xxx| 国产成人av网址| 日韩欧美第一页| 亚洲精品国产精品国自产观看浪潮| 亚洲第一精品久久忘忧草社区| 亚洲国产精品一区二区久| 51午夜精品视频| 97精品国产91久久久久久| 91高清视频免费| 欧美日韩爱爱视频| 在线观看国产成人av片| 九九九久久国产免费| 97视频在线看| 精品欧美aⅴ在线网站| 欧美国产乱视频| 日韩免费看的电影电视剧大全| 久久精品国产亚洲精品| 国产91精品在线播放| 91精品国产91久久久久久不卡| 懂色aⅴ精品一区二区三区蜜月| 亚洲精品白浆高清久久久久久| 久久香蕉国产线看观看av| 91成人免费观看网站| 国产经典一区二区| 97在线日本国产| 91久久久久久久一区二区| 亚洲欧美日韩精品| 国自产精品手机在线观看视频| 日韩欧美福利视频| 国产精品日韩欧美大师| 欧美午夜片在线免费观看| 亚洲精品一区二区网址| 久久久久久国产精品| 国产婷婷成人久久av免费高清| 狠狠躁夜夜躁人人爽超碰91| 久久久极品av| 久久在线观看视频| 精品动漫一区二区三区| 国产精品久久二区| 日韩av手机在线观看| 欧洲亚洲在线视频| 欧美久久精品午夜青青大伊人| 国产精品永久免费在线| 日韩在线视频网站| 热门国产精品亚洲第一区在线| 这里只有精品久久| 欧美韩国理论所午夜片917电影| 少妇高潮久久77777| 国产69久久精品成人| 国产精品久久久久久av福利| 亚洲精品视频免费在线观看| 欧美国产日韩中文字幕在线| 欧美壮男野外gaytube| 亚洲人成自拍网站| 亚洲区中文字幕| 国产日本欧美在线观看| 欧美风情在线观看| 奇门遁甲1982国语版免费观看高清| 精品国产一区二区三区久久| 最新国产精品拍自在线播放| 日韩精品中文字幕在线| 日韩中文字幕在线精品| 欧美另类99xxxxx| 一区二区三区视频在线| 精品久久久久久久久久国产| 国产亚洲精品久久久久动| 国产成人一区二区在线| 日韩一区二区三区xxxx| 亚洲精品99久久久久| 日韩激情视频在线播放| 性欧美xxxx| 一区二区在线免费视频| 国产一区二区在线免费| 中文字幕日韩欧美在线| 日韩视频免费大全中文字幕| 亚洲自拍小视频免费观看| 亚洲精品福利在线| 日韩精品亚洲精品| 久久男人的天堂| 欧洲永久精品大片ww免费漫画| 亚洲在线观看视频| 国产97在线观看| 亚洲性猛交xxxxwww| 97久久久久久| 欧美一级在线亚洲天堂| 国产99视频在线观看| 欧美大片在线看免费观看| 中文字幕在线看视频国产欧美在线看完整| 久久久精品中文字幕| 亚洲天堂第一页| 日韩美女在线观看一区| 久久久久久亚洲精品中文字幕| 亚洲欧美综合v| 97国产一区二区精品久久呦| 91久久精品国产91性色| 日韩精品视频免费专区在线播放| 日韩成人xxxx| 亚洲精品在线视频| 国产精品免费视频久久久| 久久久免费av|