java中使用mongodb的幾種方式


最近有時間看了一下mongodb,因為mongodb更容易擴展所以考慮使用mongodb來保存數據。

首先下載安裝mongodb,這是很簡單的,裝好后使用mongod命令就可以啟動數據庫。正式部署的話可以考慮使用百度雲bae,bae是支持mongodb的,版本2.x。

安裝好之后,就要看怎么使用了,看官方的文檔使用起來還是比較簡單的。

文檔分為shell版、python版、java版、javascript版等等。本人要再java里使用所以選擇java版。

但是我發現java版非常"啰嗦",沒有python版簡潔。

java版:
https://docs.mongodb.org/getting-started/node/insert/

python版:
https://docs.mongodb.org/getting-started/python/insert/

可以看到例子中java版new了很多的Document,這些語句都是重復的。雖然python比較簡潔但是本人也並不打算改用python來實現服務器端。因此就想看看java中有沒有其他的寫法。

實際上mongodb可以使用json格式的來保存數據的。

代碼如下:
String json = "{'database' : 'mkyongDB','table' : 'hosting'," + "'detail' : {'records' : 99, 'index' : 'vps_index1', 'active' : 'true'}}}";
Document dbObject = Document.parse(json);
db.getCollection("restaurants").insertOne(dbObject)

可以看到這樣就更簡單了,不過這並不是我們想要的方式,我們希望的方式是通過一個實體類(javabean)來定義需要保存的內容,然后通過一個sava方法來保存這個實體類。

mongodb本身是支持保存實體類的,不過我找到的是2.x的版本,只要讓實體類集成ReflectionDBObject就可以了,不過本人在測試的時候發現這樣的方式會出錯,可能和版本有關。

另外又看了一下spring-data-mongodb,spring-data可以實現上面的目的,通過insert方法來直接保存實體類。

MongoOperations mongoOps = new MongoTemplate(new Mongo(), "database");
mongoOps.dropCollection("person");

Date date = new Date();
log.info(date);
Person person = new Person("Joe", 34 );
person.setCreateTime(date);
mongoOps.insert(person);

Person p = mongoOps.findOne(new Query(where("name").is("Joe")),Person.class);
log.info(p.getCreateTime());

但是使用spring-data的時候,本人發現實體類中不能添加list,定義了list在保存的時候會報錯,但實際上mongodb是支持嵌套的。

當然,mongodb的orm還是有很多的,本人並沒有一一測試。

除了使用orm之外,還有另外一種方式來實現數據庫與實體類之間的映射,那就是通過json,使用fastjson可以直接講實體類轉成json(fastjson在轉換時是可以處理list的),然后使用mongodb中的方法來保存json這樣也是可以的。

如果你覺得本文對你有所幫助請關注我的微信公眾號:zhaojieTec,更多內容敬請期待.....

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM