在JAVA中使用MongoDB

jopen 10年前

在一个项目中决定了使用nosql中的mongdb,在本篇博文中记录了在java中创建mongdb连接,配置mongdb连接池和简单的CRUD操作,慢慢会更新一些其他操作.

首先,下载mongdb对JAVA的支持,点击这里下载驱动包,这里博主下载的是2.10.1版。

mongdb版本为2.4.9

在项目中导入该驱动包。

打开shell,在终端输入mongo,显示如下

在JAVA中使用MongoDB

只有默认的三个数据库。

新建一个java project

代码如下,

1.操控mongdb连接,使用MongoOptions来设置一些参数。

package Util;    import java.net.UnknownHostException;    import com.mongodb.DB;  import com.mongodb.Mongo;  import com.mongodb.MongoOptions;      //数据库工具类  public class MongoDBUtil {      private static Mongo mongo = null;            private static String DBString = "MongoDBTest";//数据库名      private static String hostName = "localhost";//主机名      private static int port = 27017;//端口号      private static int poolSize = 10;//连接池大小            private MongoDBUtil(){                }            //获取数据库连接      public static DB getDB(){          if(mongo == null){              init();          }                    return mongo.getDB(DBString);      }                  //初始化数据库      private static void init(){          try {              //实例化Mongo              mongo = new Mongo(hostName, port);              MongoOptions opt = mongo.getMongoOptions();              //设置连接池大小              opt.connectionsPerHost = poolSize;          } catch (UnknownHostException e) {              // TODO Auto-generated catch block              e.printStackTrace();          }      }  }

 


2.基本操作接口

package DAO;    import java.util.List;    import com.mongodb.BasicDBObject;        //数据库CRUD基本操作  public interface BaseDAO {      public boolean insert(String collectionName, BasicDBObject bean);            public boolean delete(String collectionName, BasicDBObject bean);            public List find(String collectionName, BasicDBObject bean);            public boolean update(String collectionName, BasicDBObject oldBean, BasicDBObject newBean);              }

3.基本操作实现

package DAO.Impl;    import java.util.List;    import com.mongodb.BasicDBObject;  import com.mongodb.DB;    import Util.MongoDBUtil;  import DAO.BaseDAO;    //数据库基本操作实现  public class BaseDAOImpl implements BaseDAO {        @Override      public boolean insert(String collectionName, BasicDBObject bean) {          DB db = MongoDBUtil.getDB();          db.getCollection(collectionName).insert(bean);          return false;      }        @Override      public boolean delete(String collectionName, BasicDBObject bean) {          DB db = MongoDBUtil.getDB();          db.getCollection(collectionName).remove(bean);          return false;      }        @Override      public List find(String collectionName, BasicDBObject bean) {          DB db = MongoDBUtil.getDB();          List list = db.getCollection(collectionName).find(bean).toArray();          return list ;      }        @Override      public boolean update(String collectionName, BasicDBObject oldBean, BasicDBObject newBean) {          DB db = MongoDBUtil.getDB();          db.getCollection(collectionName).update(oldBean, newBean);          return false;      }    }

4.基本操作测试

4.1添加文档操作

        BaseDAOImpl baseDAOImpl = new BaseDAOImpl();          BasicDBObject beanOne = new BasicDBObject();          beanOne.put("name", "kakakaka");          beanOne.put("sex", "男");          beanOne.put("age", 20);          baseDAOImpl.insert("test", beanOne);

执行后结果

在JAVA中使用MongoDB

可以看到mongdb会自动检测是否存在数据库MongoDBTest,如果不存在则新建一个,然后再检测是否存在文档集合test,如果不存在则新建一个,最后插入数据。

4.2查询文档操作     

        List<BasicDBObject> list = baseDAOImpl.find("test", new BasicDBObject("name", "kakakaka"));          for(BasicDBObject i : list){              System.out.println(i.get("name"));              System.out.println(i.get("sex"));              System.out.println(i.get("age"));          }

输出结果如下

kakakaka  男  20

4.3修改文档操作如下

        BasicDBObject oldBean = (BasicDBObject) baseDAOImpl.find("test", new BasicDBObject("name", "kakakaka")).get(0);          BasicDBObject newBean = (BasicDBObject) oldBean.clone();          newBean.put("name", "gugugugu");          System.out.println(oldBean.get("name"));          System.out.println(newBean.get("name"));          baseDAOImpl.update("test", oldBean, newBean);

控制台输出结果

kakakaka  gugugugu

在JAVA中使用MongoDB

4.4删除文档

先再向数据库插入一条数据

注意,mongdb区分一个文档中的不同数据是依赖它自己向每条数据中赋的"_id"

所以再插入这样一条数据

        BaseDAOImpl baseDAOImpl = new BaseDAOImpl();          BasicDBObject beanOne = new BasicDBObject();          beanOne.put("name", "gugugugu");          beanOne.put("sex", "男");          beanOne.put("age", 20);          baseDAOImpl.insert("test", beanOne);

结果如下

在JAVA中使用MongoDB

执行删除操作

首先根据"_id"将文档中第二条数据修改

        baseDAOImpl.update("test", new BasicDBObject("_id", new ObjectId("5471c9db44aeeb8b5524f2ea"))                                                                      , new BasicDBObject("name","kakakaka").append("age", 20));

结果如下

在JAVA中使用MongoDB

将"name" 等于 "kakakaka"的数据删除

        baseDAOImpl.delete("test", new BasicDBObject("name","kakakaka"));

在JAVA中使用MongoDB

 

后续其他操作更新。