不使用spring的情況下用java原生程式碼操作mongodb資料庫的兩種方式
阿新 • • 發佈:2018-12-24
由於更改了mongodb3.0資料庫的密碼,導致這幾天storm組對資料進行處理的時候,一直在報mongodb資料庫連線不上的異常。
主要原因實際上是和mongodb本身無關的,因為他們改的是配置檔案的密碼,而實際上這個密碼在程式碼中根本就沒有使用,他們在程式碼中已經把使用者驗證資訊寫死。
在協助他們解決這個問題的時候,我看到他們程式碼中在和mongodb資料庫互動時使用了已經不被建議使用的方法,於是便抽時間嘗試了一下另一種被建議的方式實現各功能。
當然了,生產環境中用的是mongodb叢集,驗證時的寫法和單機時會略有不同,我這裡就只拿單機試驗。
使用原生的Java程式碼操作mongodb資料庫,就不需要和 spring整合的那些jar包,只用到了mongodb-java-driver3.0.3.jar,程式碼如下,一些需要注意的地方也都寫在註釋中:
- package monAndMysql;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.List;
- import java.util.Set;
- import org.bson.BsonDocument;
- import org.bson.BsonString;
- import org.bson.Document;
-
import
- import com.mongodb.BasicDBObject;
- import com.mongodb.DB;
- import com.mongodb.DBCollection;
- import com.mongodb.DBCursor;
- import com.mongodb.DBObject;
- import com.mongodb.MongoClient;
- import com.mongodb.MongoCredential;
- import com.mongodb.ServerAddress;
-
import
- import com.mongodb.client.MongoCollection;
- import com.mongodb.client.MongoCursor;
- import com.mongodb.client.MongoDatabase;
- import com.mongodb.client.model.Filters;
- /**
- * mongodb和mysql效能測試
- *
- * @author tuzongxun123
- *
- */
- publicclass MonAndMysqlTest {
- publicstaticvoid main(String[] args) {
- mongodbTest();
- }
- publicstaticvoid mongodbTest() {
- ServerAddress sa = new ServerAddress("192.168.0.7", 27017);
- List<MongoCredential> mongoCredentialList = newArrayList<MongoCredential>();
- // java程式碼連線mongodb3.0資料庫驗證,userName,dbName,password
- mongoCredentialList.add(MongoCredential.createMongoCRCredential(
- "admin", "admin", "123456".toCharArray()));
- MongoClient client = new MongoClient(sa, mongoCredentialList);
- // 第一種方式
- // 第一種方式獲取db,該方法已經不建議使用
- DB mongoDB = client.getDB("mongoTest1");
- DBCollection collection1 = mongoDB.getCollection("userTest1");
- // 這裡的資料型別是dbobject
- DBObject document1 = new BasicDBObject();
- document1.put("name", "mongoTest1");
- document1.put("createTime", new Date().getTime());
- // 插入資料
- collection1.insert(document1);
- // 查詢資料
- DBCursor cursor1 = collection1.find();
- System.out.println("第一種方式插入資料的結果:");
- while (cursor1.hasNext()) {
- DBObject object = cursor1.next();
- Set<String> keySet = object.keySet();
- for (String key : keySet) {
- System.out.println(key + ":" + object.get(key));
- }
- }
- // 更改資料
- DBObject query = new BasicDBObject();
- DBObject update = new BasicDBObject();
- query.put("name", "mongoTest1");
- update.put("$set", new BasicDBObject("name", "update1"));
- collection1.update(query, update);
- System.out
- .println("--------------------------------------------------------------------------------------");
- System.out.println("第一種方式修改資料的結果:");
- DBCursor cursor11 = collection1.find();
- while (cursor11.hasNext()) {
- DBObject object = cursor11.next();
- Set<String> keySet = object.keySet();
- for (String key : keySet) {
- System.out.println(key + ":" + object.get(key));
- }
- }
- // 刪除資料
- DBObject query1 = new BasicDBObject();
- query1.put("name", "update1");
- collection1.remove(query1);
- System.out
- .println("--------------------------------------------------------------------------------------");
- System.out.println("第一種方式刪除資料的結果:");
- DBCursor cursor12 = collection1.find();
- while (cursor12.hasNext()) {
- DBObject object = cursor12.next();
- Set<String> keySet = object.keySet();
- for (String key : keySet) {
- System.out.println(key + ":" + object.get(key));
- }
- }
- // 第二種方式
- System.out
- .println("****************************************************************************");
- // 第二種方式獲取db及插入資料和查詢操作。推薦方式
- MongoDatabase database = client.getDatabase("mongoTest2");
- // 注意這裡的資料型別是document
- Document document2 = new Document();
- document2.put("name", "mongoTest2");
- document2.put("createTime", new Date().getTime());
- MongoCollection collection2 = database.getCollection("userTest2");
- // 插入資料
- collection2.insertOne(document2);
- // 查詢資料,注意這裡直接查詢出的結果不是遊標,還需要轉換
- FindIterable<Document> findIterable = collection2.find();
- MongoCursor<Document> cursor2 = findIterable.iterator();
- System.out.println("第二種方式插入資料的結果:");
- while (cursor2.hasNext()) {
- Document document = cursor2.next();
- Set<String> keySet = document.keySet();
- for (String key : keySet) {
- System.out.println(key + ":" + document.get(key));
- }
- }
- // 更改資料
- Bson filter = Filters.eq("name", "mongoTest2");
- BsonDocument update2 = new BsonDocument();
- update2.put("$set", new BsonDocument("name", new BsonString("update2")));
- collection2.updateOne(filter, update2);
- System.out
- .println("--------------------------------------------------------------------------------------");
- MongoCursor<Document> cursor21 = findIterable.iterator();
- System.out.println("第二種方式更改資料的結果:");
- while (cursor21.hasNext()) {
- Document document = cursor21.next();
- Set<String> keySet = document.keySet();
- for (String key : keySet) {
- System.out.println(key + ":" + document.get(key));
- }
- }
- // 刪除資料
- Bson filter2 = Filters.eq("name", "update2");
- collection2.deleteOne(filter2);
- System.out
- .println("--------------------------------------------------------------------------------------");
- MongoCursor<Document> cursor22 = findIterable.iterator();
- System.out.println("第二種方式刪除資料的結果:");
- while (cursor22.hasNext()) {
- Document document = cursor22.next();
- Set<String> keySet = document.keySet();
- for (String key : keySet) {
- System.out.println(key + ":" + document.get(key));
- }
- }
- // 關閉資料庫連線
- client.close();
- }
- }
執行main方法後,控制檯列印結果如下圖所示,證明操作都是沒有問題的: