Java操作Mongodb 保存/讀取java對象到/從mongodb

本文章來大家介紹一篇關于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);
}
}

}

更多相關文章
  • mongodb也是一種輕型的數據庫,下面我來介紹java與mongodb數據庫的應用,包括寫,讀取,保存mongodb數據庫的實例,各位朋友有需要可參考.下面的例子是把User對象插入到Mongodb中,並讀出來 代碼如下 User.java:package com.mongo; public cl ...
  • 超大文件我們使用普通的文件讀取方式都很慢很卡,在java中爲我提供了RandomAccessFile函數,可以快速的讀取超大文件並且不會感覺到卡哦,下面看我的一個演示實例.伺服器的日志文件往往達到400多M,簡單的文件讀取實在太慢,太占用機器資源.特別是如果你需要5分鍾就掃描一次日志文件,來統計一些
  • php操作xml類主要是針對xml文件夾一個讀取查詢刪除數據例子,下面一起來看看,目前此類暫只支持三級節點哦.文件名:xml.class.php 代碼如下 /*** * ** 文件名: xml.php ** 作 用: xml類,完善中,暫只支持三級節點 ** 作 者: loking(biyees)
  • C# 是使用Winform操作MYSQL 新增,讀取數據亂碼
    1.C# Winform 連接MYSQL 對MySQL進行新增,讀取數據操作,使用Mysql.MySql.Data組件進行數據連接及操作 2.mysql的版本本較低4.01 不能對Mysql的環境進行配置1.C# Winform 連接MYSQL 對MySQL進行新增,讀取數據操作,使用Mysql.M
  • 最近在做個一個規則匹配,從我多年使用freemarker 的經驗決定使用freemarker來做,基于我需要很多規則模板定義,每個規則單獨寫一個文件太麻煩,于是我感覺freemarker 應該可以使用字符串作爲模板,這樣我就可以在一個xml定義很多模板,查了查網上資料 大致都是更改templateL
  • 我們利用java把數據寫入然後利用php讀出,但這樣利用php讀出時發現了在memcache亂碼問題出來了,下面我來給大家介紹memcache亂碼的解決辦法.java讀取php寫入memcache內容故事背景:我用java插入一條數字記錄,用php讀取無法正確讀取.今天發現如果使用MemCached ...
  • xml文檔是一個比較特殊的純文形式的數據存儲格式了,xml常用于各種數據api交互,也同時用于不同腳本之前的數據交換了,下面我們一起來看個簡單的java讀取xml文件實例.XML具體文件如下: 代碼如下 <?xml version="1.0" encoding=" ...
  • 取絕對值用到Math類 java.lang.Math函數了,下面我們一起來看看關于取絕對值用到Math類 java.lang.Math使用方法,有興趣的朋友可進入參考.兼容類型如下static double abs(
一周排行
  • ngx_lua模塊是一個第三方模塊了,它是由淘寶開發的一個nginx第三方模塊了,我們通常會用它來做一些東西,下面一起來看看,有興趣的朋友可以和小編一起來看看.I. 准備http://www.nginx.org ng
  • protobuf是google出的一個結構化信息傳遞的工具,用于傳遞自定的strcut xxx {}內容.可用于在一個機器上的進程間,兩台設備各自的進程間等.最近因爲專案邏輯方面都做的差不多了,于是趕緊去做做測試工作
  • dreamweaver 序列號(dw8 cs3 cs5 )macromedia dreamweaver 8序列號 激活碼:wpd9991wpd162 ...
  • arguments實參.形參問題許多初學js的朋友會有所不理解了,對于這個arguments實參.形參我們下面整理一些例子來給各位參考.在函數默認就有個arguments:他代表這個函數在執行的時候傳進來的參數arg
  • mysql教程 too many connections解決辦法:1.在使用MYSQL數據源的地方加入try/catch/finally2.檢查MySqlConnection使用後是否有做close()3.不要把My
  • PP助手給iPhone6設置手機鈴聲 iPhone6手機鈴聲設置方法
    手機鈴聲iphone6有很多自帶的這種設置我想大家都是知道的,但如果要設置自定義的就不一樣 ...
  • 因爲有了伺服器,所以有了數據的讀取順序,因爲要實現順序,所以有了"鎖",因爲有了"鎖",結果我們的伺服器阻塞了伺服器阻塞是個很頭疼的問題,多少個日日夜夜,只因爲伺服器的呼喚,我 ...
  • iphone6 plus手機Cydia怎麽卸載pp助手
    Cydia插件是一個越獄之後的商店了越獄的ios設備都可以通過Cydia安裝軟件及安裝插件
  • 明明看到SD卡中有音樂的但是在手機音樂播放時又搜索不到了,下面我來給大家分析碰到此問題可能出現的情況及相對應的處理方法,希望本文章能給各位同學帶來幫助哦.原因分析:1. 在儲存卡中儲存的音樂文件,Android系統音
  • iOS7.1.1更新後App Store連接不上App Store打開慢
    剛出來不久的iOS7.1.1我就積極的升級了,結果發現升級iOS7.1.1之後我的ipad ...