zoukankan      html  css  js  c++  java
  • 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);
         }
     }
     
    }

     

  • 相关阅读:
    response.redirect三种新页面转向方法
    respones.redirect 打开新的页面的两个方法
    临时表
    ODBC方式操作oracle数据库
    OLEDB方式操作oracle数据库
    oracle所有的乱码解决方案
    引用HM.Util.Ioc 的时候报错
    js webstrom中svn的配置及使用
    js vs2013中允许js访问json文件的解决方案
    Oracle 字符集常见字符集及解决方案
  • 原文地址:https://www.cnblogs.com/gaopeng527/p/4399780.html
Copyright © 2011-2022 走看看