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(
一周排行
  • Spring Boot是微框架,是用來簡化新Spring應用的初始搭建以及開發過程.MyBatis 是支持普通 SQL查詢,存儲過程和高級映射的優秀持久層框架.本文我們來講講springboot和mybatis如何結
  • JSP 的內置對象是爲了方便, 開發 JSP 的時候,把一些對象設置爲內置對象,開發者在 JSP 頁面編程的時候不必聲明這些對象就能直接使用.本文我們具體講解一下Jsp內置對象及EL表達式的使用.一.JSP的內置對象 ...
  • 最新windows8激活碼正式版\專業版)
    本文章給各位同學收集了大量的windows8激活碼,這裏包括有正式版.專業版的win8激活 ...
  • 壓縮工具grunt打包js,css的例子
    Grunt 是一個基于任務的JavaScript工程命令行構建工具,下面我們就來看一個基于 ...
  • Nginx安裝Zend Optimizer的步驟詳解
    Zend Optimizer是一款php優化工具了也是php的推薦的一款優化代碼工具了,雖
  • 編碼轉換一直是一個比較頭痛的問題我們通常會因一些編碼問題導致頁面亂碼了,下文小編整理了一個unicode編碼轉爲utf-8編碼的例子,大家一起來看看.在前端開發中,爲了讓中文在不同的環境下都能很好的顯示,一般是將中文
  • Symfony2利用Upload實現圖片上傳例子
    symfony2實現圖片上傳可以用自身的功能也可以使用第三方應用插件了,我們這裏介紹使用u
  • windows 2008伺服器iis配置ftp站點
    雖然說iis自帶的ftp伺服器不怎麽樣,但在windows2008之後在這方面功能有所提升
  • 在php中遍曆循環讀出數組的方法有幾種,foreach,for,list,each,while都是可以的,只是那種更適合用來遍曆數組了.foreach來訪問, 遍曆的順序是固定的麽? 以什麽順序遍曆呢?比如: 代碼如
  • 文章介紹關于apache的rewirte配置,有需要的同學可以參考一下下哈.任何二級域名,均跳轉到www下.本地測試站點:www.111cn.net,下面是apache裏的配置: 代碼如下 <VirtualHo ...