Mongodb数据库DBObject对象和Json数据的转化(用Gson操作)
转自:http://zyjustin9.iyunv.com/blog/2018699 by:zyjustin9
Mongodb官方提供的Java驱动,保存与读取,需要的者是DBObject对象,这是一个接口,实现put,get等方法,跟map类似,如 果我们要直接把普通的java对象保存到mongodb,就需要先转换成DBObject对象,或者直接实现DBObject接口,操作起来相当复杂。还 好,monodb驱动带了把json转换成DBObject对象的功能,加上Google的Gson,就可以实现把普通的对象保存到mongodb中。如 果要从mogodb中读出对象,反过来操作即可,但有一点需要注意的是,mongodb的文档没有固定的字段,所以用Gson转换,可能因为各个文档属性
不同,转出的对象属性都是空的,要确保在插入时都是插入同一个类的对象。
下面的例子是把User对象插入到Mongodb中,并读出来
User.java:
public class User {
private String name;
private 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;
}
public class Oid{
String $oid;
public String get$oid() {
return $oid;
}
public void set$oid(String $oid) {
this.$oid = $oid;
}
}
}
Main.java:
public static void main(String[] args) throws MongoException, UnknownHostException {
Test t=new Test();
DB db=t.getDb();
DBCollection coll = db.getCollection("people");
User u1=new User();
u1.setName("joe");
u1.setAge(32);
Gson gson=new Gson();
DBObject dbObject=(DBObject) JSON.parse(gson.toJson(u1));
coll.insert(dbObject);
DBCursor cursor = coll.find();
try {
while(cursor.hasNext()){
DBObject obj=cursor.next();
User u=gson.fromJson(obj.toString(), User.class);
System.out.println(u.getName()+"-"+u.getAge());
}
}finally{
cursor.close();
}
}
为了方便,可以直接把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);
}
}
}
页:
[1]