一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java單例模式下的MongoDB數據庫操作工具類

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

2021-03-15 14:28Constantin Java教程

這篇文章主要介紹了Java單例模式下的MongoDB數據庫操作工具類,結合實例形式分析了java基于單例模式下操作MongoDB數據庫相關連接、查詢、插入、刪除等操作封裝技巧,需要的朋友可以參考下

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

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

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

JAVA驅動版本:

?
1
2
3
4
5
6
<!-- MongoDB驅動 -->
<dependency>
  <groupId>org.mongodb</groupId>
  <artifactId>mongo-java-driver</artifactId>
  <version>3.0.2</version>
</dependency>

工具類代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
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程序設計有所幫助。

原文鏈接:https://www.cnblogs.com/zhoulf/p/4571647.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产欧美精品一区二区三区 | 色先锋影音资源 | 国产精品亚欧美一区二区三区 | 欧美一级高清免费a | 猫咪社区免费资源在线观看 | 亚洲精品www久久久久久 | 男人在线影院 | 瘦老汉gay| 菠萝视频污 | 成人永久免费视频 | 视频一区二区国产无限在线观看 | 午夜免费小视频 | 亚洲一区二区三区不卡在线播放 | 图片专区小说专区卡通动漫 | 天天射寡妇射 | 四虎永久成人免费 | 太粗 好紧 使劲舒服 | 国产精品视频一区二区三区不卡 | 欧美日韩国产一区二区三区欧 | 国产精品久久久久毛片 | 日本www视频在线观看 | 日韩免费视频播播 | 青草视频网址 | 免费观看一级特黄三大片视频 | 韩日视频在线观看 | 国内自拍网红在线综合 | b片在线观看 | 亚瑟天堂久久一区二区影院 | 好大好硬好长好爽a网站 | 国产酒店自拍 | 男女羞羞的视频 | 99久久九九 | 1024免费福利永久观看网站 | 精品日韩一区二区三区 | 激情视频亚洲 | 婷婷在线综合 | 亚洲国产精品ⅴa在线观看 亚洲国产高清一区二区三区 | 日本高清免费不卡在线 | 91成人爽a毛片一区二区 | 国产在视频线在精品 | 久久久91精品国产一区二区 |