Java操作Mongodb 保存/读取java对象到/从mongodb
2015-04-07 22:17
411 查看
从 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:
Main.java:
为了方便,可以直接把Gson整合进驱动里,直接修改驱动的源代码
com.mongodb.DBCollection.java:
新增方法:
新增方法
修改后的调用方法:
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); } } }
相关文章推荐
- Java and Mongodb 保存/读取java对象到/从mongodb
- java 将对象写入文件进行保存和读取
- Redis缓存系统(一)Java-Jedis操作Redis,基本操作以及 实现对象保存
- java操作mongodb时,对象bean和DBObject相互转换的方法(推荐)
- java操作redis: 将string、list、map、自定义的对象保存到redis中
- [Java] Java序列化将一个对象的内容保存到文件和从文件读取对象
- Redis缓存系统-Java-Jedis操作Redis,基本操作以及 实现对象保存
- MongoDB保存Java对象的三种方法
- java操作redis: 将string、list、map、自定义的对象保存到redis中
- Java读取文件内容与字符串保存成文件的操作
- java如何操作注册表(Preferences类)(在windows的注册表中保存、读取)
- 【redis,1】java操作redis: 将string、list、map、自定义的对象保存到redis中
- Java将对象保存到文件中/从文件中读取对象的方法
- mongodb保存java对象的三种方法
- Java将对象保存到文件中/从文件中读取对象
- Java对对象进行保存和读取
- java实现xml文件读取并保存到对象
- mongodb dirver for java【读取操作】
- 有关Java编写GUI界面的文件读取和保存操作
- java操作mongodb时,对象bean和DBObject相互转换的方法