zoukankan      html  css  js  c++  java
  • 学习MongoDB--(11):应用举例(利用java操作MongoDB)

    原文地址:http://blog.csdn.net/drifterj/article/details/7948090

    目录地址:http://blog.csdn.net/DrifterJ/article/category/1191327/2

    前面我们都是通过shell来操作存取MongoDB的数据,shell中使用的语言就是javascript。我们这次说一下如何通过Java来访问操作MongoDB数据库的。

    Java驱动程序是MongoDB最早的驱动,已用于生产环境很长时间,十分稳定。可以到MongoDB官方网站下载驱动,我的资源中也有,驱动版本为2.9.0。

    这个jar文件中,有两个包,我们会经常用到com.mongodb 和 com.mongodb.gridfs 。在Java中操作MongoDB,各种概念和shell中类似,几乎所有的方法名也都一致,我们先看个简单的例子吧:

    1. package cn.test;  
    2.   
    3. import java.net.UnknownHostException;  
    4.   
    5. import com.mongodb.BasicDBObject;  
    6. import com.mongodb.DB;  
    7. import com.mongodb.DBCollection;  
    8. import com.mongodb.DBObject;  
    9. import com.mongodb.Mongo;  
    10.   
    11. public class Test {  
    12.   
    13.     public static void main(String[] args) throws UnknownHostException {  
    14.           
    15.         /** 
    16.          * Mongo类代表与MongoDB服务器的连接,有多种构造函数。无参构造函数默认连接localhost:27017. 
    17.          */  
    18.         Mongo connection = new Mongo("localhost:20000");  
    19.         /** 
    20.          * DB类代表数据库,如果当前服务器上没有该数据库,会默认创建一个 
    21.          */  
    22.         DB db = connection.getDB("mylearndb");  
    23.         /** 
    24.          * DBCollection代表集合,如果数据库中没有该集合,会默认创建一个 
    25.          */  
    26.         DBCollection users = db.getCollection("users");  
    27.         /** 
    28.          * DBObject代表文档,这是一个接口,java中提供了多种实现,最简单的就是BasicDBObject了 
    29.          */  
    30.         DBObject user = new BasicDBObject();  
    31.         user.put("name", "jimmy");  
    32.         user.put("age", "34");  
    33.         DBObject address = new BasicDBObject();  
    34.         address.put("city", "bj");  
    35.         address.put("street", "bq road");  
    36.         address.put("mail", "ufpark 68#");  
    37.         /** 
    38.          * 对于内嵌文档,我们需要先将内嵌文档填充后,再填充到外层文档中! 
    39.          */  
    40.         user.put("address", address);  
    41.         // 将该文档插入到集合中  
    42.         users.insert(user);  
    43.         // 从集合中查询数据,我们就查询一条,调用findOne即可  
    44.         DBObject dbUser = users.findOne();  
    45.         System.out.println("name" + " : "  + dbUser.get("name") );  
    46.         System.out.println("age" + " : "  + dbUser.get("age") );  
    47.         DBObject dbAddress = (DBObject)user.get("address");  
    48.         System.out.println("city" + " : "  + dbAddress.get("city") );  
    49.         System.out.println("street" + " : "  + dbAddress.get("street") );  
    50.         System.out.println("mail" + " : "  + dbAddress.get("mail") );  
    51.           
    52.     }  
    53.   
    54. }  


    输出结果为:

    1. name : jimmy  
    2. age : 34  
    3. city : bj  
    4. street : bq road  
    5. mail : ufpark 68#  

    从上述例子,我们可以看出,利用Java驱动操作MongoDB和shell中操作方式是十分相似的,Java中操作更具有OO的特征。

    我们这里稍微提一下上面注释中,解释的文档类。Java驱动中文档必须是DBObject接口类型,这个接口可以认为是一个有序地java.util.Map。Java驱动中有提供了很多实现,我们上例中采用了最简单的BasicDBObject。

    【向集合中保存数组】

    MongoDB集合中的键值对的值支持数组,在shell中,我们通过[],来表示数组,那Java驱动中如何表示数组呢?在Java驱动中,java.util.List类型的对象,都可以表示MongoDB中的数组!我们看一个例子:

    1. package cn.test;  
    2.   
    3. import java.net.UnknownHostException;  
    4. import java.util.ArrayList;  
    5. import java.util.List;  
    6.   
    7. import com.mongodb.BasicDBObject;  
    8. import com.mongodb.BasicDBObjectBuilder;  
    9. import com.mongodb.DB;  
    10. import com.mongodb.DBCollection;  
    11. import com.mongodb.DBObject;  
    12. import com.mongodb.Mongo;  
    13.   
    14. public class Test1 {  
    15.   
    16.     public static void main(String[] args) throws UnknownHostException {  
    17.           
    18.         /** 
    19.          * Mongo类代表与MongoDB服务器的连接,有多种构造函数。无参构造函数默认连接localhost:27017. 
    20.          */  
    21.         Mongo connection = new Mongo("localhost:20000");  
    22.         /** 
    23.          * DB类代表数据库,如果当前服务器上没有该数据库,会默认创建一个 
    24.          */  
    25.         DB db = connection.getDB("mylearndb");  
    26.         /** 
    27.          * DBCollection代表集合,如果数据库中没有该集合,会默认创建一个 
    28.          */  
    29.         DBCollection fruitShop = db.getCollection("fruitshop");  
    30.         /** 
    31.          *  创建水果店文档对象 
    32.          */  
    33.         DBObject shop1 = new BasicDBObject();  
    34.         shop1.put("name", "The Fruit King");  
    35.         /** 
    36.          *  水果店内水果保存在一个内嵌文档的数组中,格式为: 
    37.          *  [{"name" : "apple", "quality" : "good", "price" : "5.6"},  
    38.          *   {"name" : "orange", "quality" : "normal", "price" : "1.5"}, 
    39.          *   ......] 
    40.          */  
    41.         // 数组通过List表示  
    42.         List<DBObject> fruits = new ArrayList<DBObject>();  
    43.         // 数组中的每一个文档,我们通过BasicDBObjectBuilder来构造  
    44.         fruits.add(BasicDBObjectBuilder.start().add("name", "apple").add("quality", "good").add("price", "5.6").get());  
    45.         fruits.add(BasicDBObjectBuilder.start().add("name", "orange").add("quality", "normal").add("price", "1.5").get());  
    46.         shop1.put("fruits", fruits);  
    47.           
    48.         fruitShop.insert(shop1);  
    49.           
    50.     }  
    51.   
    52. }  


    我们通过Shell连接到数据库上,直观地看看数据库中集合内的数据:

    [javascript] view plaincopy
    1. > use mylearndb;  
    2. switched to db mylearndb  
    3. > db.fruitshop.find();  
    4. "_id" : ObjectId("504c26fed9005e6e410c5979"), "name" : "The Fruit King", "frui  
    5. ts" : [         {       "name" : "apple",       "quality" : "good",     "price"  
    6. "5.6" },      {       "name" : "orange",      "quality" : "normal",   "price"  
    7. "1.5" } ] }  
    8. >  


    以上就是利用Java驱动操作MongoDB的一个简单示例,使用Java驱动操作MongoDB很简单,大家实际使用中对于API可以参照MongoDB提供的官方文档。

    下面的链接就是2.9.0版驱动对应的API文档:

    http://api.mongodb.org/java/2.9.0/

  • 相关阅读:
    使用SSH搭建简易的网上购物系统
    myeclipse8.0中安装maven插件m2eclipse
    Ant入门
    hibernate中多对多分解成一对多,
    在eclipse上,安装myeclipse插件
    hibernate复合主键的映射
    struts2中struts:iterator标签的使用
    hibernate复合主键同时做外键
    Mahout问题总括
    面向对象基础概念
  • 原文地址:https://www.cnblogs.com/zhuawang/p/3965483.html
Copyright © 2011-2022 走看看