1. 程式人生 > >不使用spring的情況下用java原生程式碼操作mongodb資料庫的兩種方式

不使用spring的情況下用java原生程式碼操作mongodb資料庫的兩種方式

由於更改了mongodb3.0資料庫的密碼,導致這幾天storm組對資料進行處理的時候,一直在報mongodb資料庫連線不上的異常。

主要原因實際上是和mongodb本身無關的,因為他們改的是配置檔案的密碼,而實際上這個密碼在程式碼中根本就沒有使用,他們在程式碼中已經把使用者驗證資訊寫死。

在協助他們解決這個問題的時候,我看到他們程式碼中在和mongodb資料庫互動時使用了已經不被建議使用的方法,於是便抽時間嘗試了一下另一種被建議的方式實現各功能。

當然了,生產環境中用的是mongodb叢集,驗證時的寫法和單機時會略有不同,我這裡就只拿單機試驗。

使用原生的Java程式碼操作mongodb資料庫,就不需要和

spring整合的那些jar包,只用到了mongodb-java-driver3.0.3.jar,程式碼如下,一些需要注意的地方也都寫在註釋中:

  1. package monAndMysql;  
  2. import java.util.ArrayList;  
  3. import java.util.Date;  
  4. import java.util.List;  
  5. import java.util.Set;  
  6. import org.bson.BsonDocument;  
  7. import org.bson.BsonString;  
  8. import org.bson.Document;  
  9. import
     org.bson.conversions.Bson;  
  10. import com.mongodb.BasicDBObject;  
  11. import com.mongodb.DB;  
  12. import com.mongodb.DBCollection;  
  13. import com.mongodb.DBCursor;  
  14. import com.mongodb.DBObject;  
  15. import com.mongodb.MongoClient;  
  16. import com.mongodb.MongoCredential;  
  17. import com.mongodb.ServerAddress;  
  18. import
     com.mongodb.client.FindIterable;  
  19. import com.mongodb.client.MongoCollection;  
  20. import com.mongodb.client.MongoCursor;  
  21. import com.mongodb.client.MongoDatabase;  
  22. import com.mongodb.client.model.Filters;  
  23. /** 
  24.  * mongodb和mysql效能測試 
  25.  * 
  26.  * @author tuzongxun123 
  27.  * 
  28.  */
  29. publicclass MonAndMysqlTest {  
  30.     publicstaticvoid main(String[] args) {  
  31.        mongodbTest();  
  32.     }  
  33.     publicstaticvoid mongodbTest() {  
  34.        ServerAddress sa = new ServerAddress("192.168.0.7"27017);  
  35.        List<MongoCredential> mongoCredentialList = newArrayList<MongoCredential>();  
  36.        // java程式碼連線mongodb3.0資料庫驗證,userName,dbName,password
  37.        mongoCredentialList.add(MongoCredential.createMongoCRCredential(  
  38.               "admin""admin""123456".toCharArray()));  
  39.        MongoClient client = new MongoClient(sa, mongoCredentialList);  
  40.        // 第一種方式
  41.        // 第一種方式獲取db,該方法已經不建議使用
  42.        DB mongoDB = client.getDB("mongoTest1");  
  43.        DBCollection collection1 = mongoDB.getCollection("userTest1");  
  44.        // 這裡的資料型別是dbobject
  45.        DBObject document1 = new BasicDBObject();  
  46.        document1.put("name""mongoTest1");  
  47.        document1.put("createTime"new Date().getTime());  
  48.        // 插入資料
  49.        collection1.insert(document1);  
  50.        // 查詢資料
  51.        DBCursor cursor1 = collection1.find();  
  52.        System.out.println("第一種方式插入資料的結果:");  
  53.        while (cursor1.hasNext()) {  
  54.            DBObject object = cursor1.next();  
  55.            Set<String> keySet = object.keySet();  
  56.            for (String key : keySet) {  
  57.               System.out.println(key + ":" + object.get(key));  
  58.            }  
  59.        }  
  60.        // 更改資料
  61.        DBObject query = new BasicDBObject();  
  62.        DBObject update = new BasicDBObject();  
  63.        query.put("name""mongoTest1");  
  64.        update.put("$set"new BasicDBObject("name""update1"));  
  65.        collection1.update(query, update);  
  66.        System.out  
  67.            .println("--------------------------------------------------------------------------------------");  
  68.        System.out.println("第一種方式修改資料的結果:");  
  69.        DBCursor cursor11 = collection1.find();  
  70.        while (cursor11.hasNext()) {  
  71.            DBObject object = cursor11.next();  
  72.            Set<String> keySet = object.keySet();  
  73.            for (String key : keySet) {  
  74.               System.out.println(key + ":" + object.get(key));  
  75.            }  
  76.        }  
  77.        // 刪除資料
  78.        DBObject query1 = new BasicDBObject();  
  79.        query1.put("name""update1");  
  80.        collection1.remove(query1);  
  81.        System.out  
  82.            .println("--------------------------------------------------------------------------------------");  
  83.        System.out.println("第一種方式刪除資料的結果:");  
  84.        DBCursor cursor12 = collection1.find();  
  85.        while (cursor12.hasNext()) {  
  86.            DBObject object = cursor12.next();  
  87.            Set<String> keySet = object.keySet();  
  88.            for (String key : keySet) {  
  89.               System.out.println(key + ":" + object.get(key));  
  90.            }  
  91.        }  
  92.        // 第二種方式
  93.        System.out  
  94.                .println("****************************************************************************");  
  95.        // 第二種方式獲取db及插入資料和查詢操作。推薦方式
  96.        MongoDatabase database = client.getDatabase("mongoTest2");  
  97.        // 注意這裡的資料型別是document
  98.        Document document2 = new Document();  
  99.        document2.put("name""mongoTest2");  
  100.        document2.put("createTime"new Date().getTime());  
  101.        MongoCollection collection2 = database.getCollection("userTest2");  
  102.        // 插入資料
  103.        collection2.insertOne(document2);  
  104.        // 查詢資料,注意這裡直接查詢出的結果不是遊標,還需要轉換
  105.        FindIterable<Document> findIterable = collection2.find();  
  106.        MongoCursor<Document> cursor2 = findIterable.iterator();  
  107.        System.out.println("第二種方式插入資料的結果:");  
  108.        while (cursor2.hasNext()) {  
  109.            Document document = cursor2.next();  
  110.            Set<String> keySet = document.keySet();  
  111.            for (String key : keySet) {  
  112.               System.out.println(key + ":" + document.get(key));  
  113.            }  
  114.        }  
  115.        // 更改資料
  116.        Bson filter = Filters.eq("name""mongoTest2");  
  117.        BsonDocument update2 = new BsonDocument();  
  118.        update2.put("$set"new BsonDocument("name"new BsonString("update2")));  
  119.        collection2.updateOne(filter, update2);  
  120.        System.out  
  121.            .println("--------------------------------------------------------------------------------------");  
  122.        MongoCursor<Document> cursor21 = findIterable.iterator();  
  123.        System.out.println("第二種方式更改資料的結果:");  
  124.        while (cursor21.hasNext()) {  
  125.            Document document = cursor21.next();  
  126.            Set<String> keySet = document.keySet();  
  127.            for (String key : keySet) {  
  128.               System.out.println(key + ":" + document.get(key));  
  129.            }  
  130.        }  
  131.        // 刪除資料
  132.        Bson filter2 = Filters.eq("name""update2");  
  133.        collection2.deleteOne(filter2);  
  134.        System.out  
  135.            .println("--------------------------------------------------------------------------------------");  
  136.        MongoCursor<Document> cursor22 = findIterable.iterator();  
  137.        System.out.println("第二種方式刪除資料的結果:");  
  138.        while (cursor22.hasNext()) {  
  139.            Document document = cursor22.next();  
  140.            Set<String> keySet = document.keySet();  
  141.            for (String key : keySet) {  
  142.               System.out.println(key + ":" + document.get(key));  
  143.            }  
  144.        }  
  145.        // 關閉資料庫連線
  146.        client.close();  
  147.     }  
  148. }  


執行main方法後,控制檯列印結果如下圖所示,證明操作都是沒有問題的: