Java操作Mongodb 儲存/讀取java對象到/從mongodb

來源:互聯網
上載者:User

標籤:

Mongodb官方提供的Java驅動,儲存與讀取,需要的者是DBObject對象,這是一個介面,實現put,get等方法,跟map類似,如果我們要直接把普通的java對象儲存到mongodb,就需要先轉換成DBObject對象,或者直接實現DBObject介面,操作起來相當複雜。還好,monodb驅動帶了把json轉換成DBObject對象的功能,加上Google的Gson,就可以實現把普通的對象儲存到mongodb中。如果要從mogodb中讀出對象,反過來操作即可,但有一點需要注意的是,mongodb的文檔沒有固定的欄位,所以用Gson轉換,可能因為各個文件屬性不同,轉出的對象屬性都是空的,要確保在插入時都是插入同一個類的對象。
下面的例子是把User對象插入到Mongodb中,並讀出來
User.java:

package com.mongo; public class User { String name; int age; Oid _id; public String getName() {  return name; } public void setName(String name) {  this.name = name; } public int getAge() {  return age; } public void setAge(int age) {  this.age = age; } /**  * Mongodb會自動產生ObjectId  * @author fhp  *  */ public class Oid{  String $oid;  public String get$oid() {   return $oid;  }   public void set$oid(String $oid) {   this.$oid = $oid;  }  }}

Main.java:

package com.mongo; import java.net.UnknownHostException; import com.google.gson.Gson;import com.mongodb.DB;import com.mongodb.DBCollection;import com.mongodb.DBCursor;import com.mongodb.DBObject;import com.mongodb.MongoClient;import com.mongodb.util.JSON; public class Main {  /**  * @param args  * @throws UnknownHostException   */ public static void main(String[] args) throws UnknownHostException {  // TODO Auto-generated method stub     MongoClient mongoClient = new MongoClient();      DB psdoc = mongoClient.getDB("psdoc");     DBCollection user=psdoc.getCollection("user");      User u1=new User();     u1.setAge(20);     u1.setName("ssss");     Gson gson=new Gson();     //轉換成json字串,再轉換成DBObject對象     DBObject dbObject = (DBObject) JSON.parse(gson.toJson(u1));     //插入資料庫     user.insert(dbObject);      DBCursor cursor=user.find();     while(cursor.hasNext())     {      DBObject obj=cursor.next();      //反轉      User u=gson.fromJson(obj.toString(), User.class);      System.out.println(u.name);     } } }

為了方便,可以直接把Gson整合進驅動裡,直接修改驅動的原始碼
com.mongodb.DBCollection.java:
新增方法:

/**  * 把普通的對象寫入資料庫  *   * @param obj  * @return  */ public WriteResult insert(Object obj) {  Gson gson = new Gson();  DBObject dbObject = (DBObject) JSON.parse(gson.toJson(obj));  gson=null;  return insert(dbObject); }com.mongodb.DBCursor.java:

新增方法

 /**     * 從資料庫讀出對象     * @param obj     * @param clazz     * @return     */    public <T> T nextObj(Class<T> clazz) {        _checkType( CursorType.ITERATOR );        Gson gson=new Gson();        T u=gson.fromJson(_next().toString(), clazz);gson=null;        return u;    }

 

修改後的調用方法:

Main.java:package com.mongo; import java.net.UnknownHostException; import com.mongodb.DB;import com.mongodb.DBCollection;import com.mongodb.DBCursor;import com.mongodb.MongoClient; public class Main {  /**  * @param args  * @throws UnknownHostException   */ public static void main(String[] args) throws UnknownHostException {  // TODO Auto-generated method stub     MongoClient mongoClient = new MongoClient();      DB psdoc = mongoClient.getDB("psdoc");     DBCollection user=psdoc.getCollection("user");      User u1=new User();     u1.setAge(20);     u1.setName("ssss");     //直接插入對象     user.insert(u1);     DBCursor cursor=user.find();     while(cursor.hasNext())     {      //傳入類參數,反回該類對象      User u=cursor.nextObj(User.class);      System.out.println(u.name);     } } }

 

 

Java操作Mongodb 儲存/讀取java對象到/從mongodb

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.