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


http://central.maven.org/maven2/org/mongodb/mongo-java-driver/選擇一個版本進行下載,這里選擇的是3.0.0版本,具體下載以下jar包:

mongo-java-driver-3.0.0.jar

mongo-java-driver-3.0.0-javadoc.jar

mongo-java-driver-3.0.0-sources.jar

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);
     }
 }
 
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM