Java操作Mongodb 保存/读取java对象到/从mongodb
2024-10-19 01:28:44
从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);
}
} }
最新文章
- python 实现简单 http 代理
- 6.Swift协议|扩展|访问权限|异常调试|类型转换|运算函数|ARC|类类型初试化器|值类型初始化器
- C#编辑图像文件EXIF信息
- 造成ORA-12560: TNS: 协议适配器错误的问题的原因有三个:
- Hibernate调用存储过程和函数
- ireport 导出工具类
- cURL 学习笔记与总结(4)使用 cURL 从 ftp 上下载文件与上传文件到 ftp
- Android——Dialog
- POJ Round Numbers(数位DP)
- 基于visual Studio2013解决C语言竞赛题之0524职工年龄
- 技术分享,学术报告presentation 常用的承接句
- ListCtrl控件
- nginx unit PHP
- InputStream和Reader,FileInputStream和 FileReader的区别
- python selenium web自动化测试完整项目实例
- 第一节,初识OpenCV3-图像的读、写、显、格式转化等
- 关于MAX30100心率的编程
- linux 判断文件最后更新时间 实现监控日志是否有输出功能
- POJ3013 Big Christmas Tree
- +5v to +13v Converter