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

     }

 }

 

}

 

 

你可能感兴趣的:(mongodb)