Java操作Mongodb 保存/读取java对象到/从mongodb

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

时间: 2024-09-16 22:12:10

Java操作Mongodb 保存/读取java对象到/从mongodb的相关文章

Java从数据库中读取Blob对象图片并显示的方法_java

本文实例讲述了Java从数据库中读取Blob对象图片并显示的方法.分享给大家供大家参考.具体实现方法如下: 第一种方法: 大致方法就是,从数据库中读出Blob的流来,写到页面中去: 复制代码 代码如下: Connection conn = DBManager.getConnection();   String sql = "SELECT picture FROM teacher WHERE id=1";   PreparedStatement ps = null;   ResultSe

Java mongodb保存/读取应用实例详解

下面的例子是把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(

Java操作Excel文件基础--Java Excel API

        Java Excel API是一个成熟的.开源的Java API,主页地址:http://jexcelapi.sourceforge.net/,通过它开发人员可以动态地读取.写入或者修改Excel文件.利用这些APIJava开发人员,可以非常轻松地完成Excel读取.写入和修改,并且可以把改动写入到任何输出流中(如磁盘.HTTP.socket和数据库等等).由于Java Excel API是完全由Java编写的,所以它可以运行在任何可以运行Java虚拟机的操作系统上.它主要的特性

编程-一个用java操作文件并修改文件的内容的问题

问题描述 一个用java操作文件并修改文件的内容的问题 假设一个项目里有n个文件,n个文件中有n个无用的注释,这些注释都是这种格式的 /*无效资源开始 System.out.println("无效的内容"); 无效资源结束*/ 怎么才能通过java,把这些注释都删除掉? 解决方案 大概思路:以一个文件为例,依次读出文件中的内容,检查以"/*"开始,以"*/"结束的字符串,如果和给定注释内容相同就删除注释,至于程序,慢慢斟酌吧. 解决方案二: 正则

udp-关于Java操作继电器的问题

问题描述 关于Java操作继电器的问题 Java如何通过udp协议去操作继电器? 我用端口检测工具检测到的数据是正常的 但是就是发不到继电器上去! 还有一个问题是继电器只能识别16进制的数! 我该如何去处理那个数据? 蛋疼得紧啊! 解决方案 udp协议本身不能操作继电器.必须有下位机(一般是单片机),通过网络和它通讯,让它操作.而下位机的协议这个不统一. 解决方案二: 你的继电器通讯接口 /协议要一样,这样才能操作继电器 解决方案三: 我现在是这样的 下位程序 已经有人写好了 通过测试工具可以测

java操作excel的方法_java

本文实例讲述了java操作excel的方法.分享给大家供大家参考.具体如下: WritableWorkbook workbook = Workbook.createWorkbook(new File("d:\\output.xls")); WritableSheet sheet = workbook.createSheet("项目简报", 0); //样式 WritableFont sonti18font = new WritableFont(WritableFon

java操作mongodb时,对象bean和DBObject相互转换的方法(推荐)_java

如下所示: package com.iqbon.spider.util; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.util.Date; import org.apache.commons.beanutils.BeanUtils; import com.mongodb.BasicDBObject; import com.mongodb.DBObje

【MongoDB for Java】Java操作MongoDB数据库_MongoDB

本篇文章主要介绍Java操作MongoDB. 开发环境: System:Windows IDE:eclipse.MyEclipse 8 Database:mongoDB 开发依赖库: JavaEE5.mongo-2.5.3.jar.junit-4.8.2.jar   一.准备工作 1. 首先,下载mongoDB对Java支持的驱动包 驱动包下载地址:http://www.jb51.net/softs/41751.html mongoDB对Java的相关支持.技术:http://www.mongo

Java操作MongoDB进行增删改查实例教程

现在我们就用Java来操作MongoDB的数据. 一.准备工作 1. 首先,下载mongoDB对Java支持的驱动包 驱动包下载地址:https://github.com/mongodb/mongo-java-driver/downloads mongoDB对Java的相关支持.技术:http://www.mongodb.org/display/DOCS/Java+Language+Center 驱动源码下载:https://download.github.com/mongodb-mongo-j