Java操作MongoDB数据库示例分享

作者:hebedich 时间:2023-06-30 11:25:03 

MongoDB是一个文档型数据库,是NOSQL家族中最重要的成员之一,以下代码封装了MongoDB的基本操作。

MongoDBConfig.java


package com.posoftframework.mongodb;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import com.mongodb.DB;
import com.mongodb.Mongo;
/**
* MongoDB配置类
*
* @author yongtree
* @date 2010-7-7 下午07:45:08
* @version 1.0
*/
public class MongoDBConfig {
 private static Mongo mongo;
 private static DB db;
 private static final String MONGO_DB_ADDRESS = "localhost";
 private static final int MONGO_DB_PORT = 27017;
 private static final String MONGO_DB_USERNAME = "root";
 private static final String MONGO_DB_PASSWORD = "root";
 private static final String MONGO_DB_DBNAME = "mongodb";
 private static final String MONGO_DB_RESOURCE_FILE = "mongodb.cfg.properties";
 /**
  * Mongo数据库参数
  */
 private static Map<String, String> cfgMap = new HashMap<String, String>();
 private static Hashtable<String, DB> mongoDBs = new Hashtable<String, DB>();
 /**
  * 初始化Mongo的数据库
  */
 static {
   init();
 }
 public static File getConfigFile() {
   String path = MongoDBConfig.class.getResource("/").getPath();
   String fileName = path + MONGO_DB_RESOURCE_FILE;
   File file = new File(fileName);
   if (file.exists()) {
     return file;
   }
   return null;
 }
 @SuppressWarnings("unchecked")
 private static void initCfgMap() {
   File file = getConfigFile();
   if (file != null) {
     Properties p = new Properties();
     try {
       p.load(new FileInputStream(file));
       for (Enumeration enu = p.propertyNames(); enu.hasMoreElements();) {
         String key = (String) enu.nextElement();
         String value = (String) p.getProperty(key);
         cfgMap.put(key, value);
       }
     } catch (IOException e) {
       System.out.println("记载Mongo配置文件失败!");
       e.printStackTrace();
     }
   } else {
     cfgMap.put("mongo.db.address", MONGO_DB_ADDRESS);
     cfgMap.put("mongo.db.port", String.valueOf(MONGO_DB_PORT));
     cfgMap.put("mongo.db.username", MONGO_DB_USERNAME);
     cfgMap.put("mongo.db.password", MONGO_DB_PASSWORD);
     cfgMap.put("mongo.db.dbname", MONGO_DB_DBNAME);
   }
 }
 /**
  * 初始化Mongo数据库
  */
 private static void init() {
   initCfgMap();
   try {
     String address = cfgMap.get("mongo.db.address");
     int port = Integer.parseInt(cfgMap.get("mongo.db.port").toString());
     String dbName = cfgMap.get("mongo.db.dbname");
     String username = cfgMap.get("mongo.db.username");
     String password = cfgMap.get("mongo.db.password");
     mongo = new Mongo(address, port);
     if (dbName != null && !"".equals(dbName)) {
       db = mongo.getDB(dbName);
       if (username != null && !"".equals(username)) {
         db.addUser(username, password.toCharArray());
       }
       mongoDBs.put(dbName, db);
     }
   } catch (IOException e) {
     e.printStackTrace();
   }
 }
 /**
  * 得到Mongo的实例
  *
  * @return
  */
 public static Mongo getMongo() {
   return mongo;
 }
 /**
  * 得到Mongo的图片数据库
  *
  * @return
  */
 public static DB getDB() {
   return db;
 }
 public static List<String> getDBNames() {
   return mongo.getDatabaseNames();
 }
 /**
  * 根据数据库名称,得到数据库<br/>
  * 如果不存在,则创建一个该名称的数据库,并设置用户名和密码为配置文件中的参数值</br>
  *
  * @param dbName
  * @return
  */
 public static DB getDBByName(String dbName) {
   DB db = mongo.getDB(dbName);
   if (!mongoDBs.contains(db)) {
     db.addUser(cfgMap.get("mongo.db.username"), cfgMap.get(
         "mongo.db.password").toCharArray());
     mongoDBs.put(dbName, db);
   }
   return db;
 }
}

MongoService.java


/************************* 版权声明 *********************************
*                                                               *
*           版权所有:百洋软件                                                    *
*     Copyright (c) 2010 by www.po-soft.com                        *
*                                                               *
************************* 变更记录 *********************************
*
* 创建者:yongtree  创建日期: 2010-7-7
* 备注:
*
* 修改者:    修改日期:
* 备注:
*
*/
package com.posoftframework.mongodb;
import java.util.List;
import java.util.Map;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBObject;
/**
* 操作MongoDB的DAO接口
*
* @author yongtree
* @date 2010-7-7 下午04:44:43
* @version 1.0
*/
public interface MongoService {
 public abstract DBCollection getCollection();
 /**
  * 根据数据集合的Map,插入数据 map的key对应数据库中的DBCollection的key值
  *
  * @param obj
  */
 public abstract DBObject insert(DBObject obj);
 /**
  * 根据List<Map<String,Object>>结构的数据集合,插入数据
  *
  * @param list
  */
 public abstract void insertBatch(List<DBObject> list);
 /**
  * 按照条件参数集合map,删除数据
  *
  * @param map
  */
 public abstract void delete(DBObject obj);
 /**
  * 按照多种条件的并集,批量删除数据
  *
  * @param list
  */
 public abstract void deleteBatch(List<DBObject> list);
 /**
  * 得到Collection()总的记录数
  *
  * @return
  */
 public abstract long getCollectionCount();
 public abstract long getCount(DBObject query);
 public abstract List<DBObject> find(DBObject query);
 public abstract List<DBObject> find(DBObject query,DBObject sort);
 public abstract List<DBObject> find(DBObject query,DBObject sort,int start,int limit);
 /**
  * 根据whereFields参数,更新setFields值
  *
  * @param setFields
  * @param whereFields
  */
 public abstract void update(DBObject setFields,
     DBObject whereFields);
 public abstract List<DBObject> findAll();
 /**
  * 根据ID找到唯一数据 有1个id字段标记
  *
  * @param id
  * @return
  */
 public abstract DBObject getById(String id);
 /**
  * 获取所有数据库名称
  *
  * @return
  */
 public List<String> getAllDBNames();
 public abstract String getDbName();
 public abstract void setDbName(String dbName);
 public abstract DB getDb();
 public abstract String getCollName();
 public abstract void setCollName(String collName);
}

MongoServiceImpl.java


/************************* 版权声明 *********************************
*                                                               *
*           版权所有:百洋软件                                                    *
*     Copyright (c) 2010 by www.po-soft.com                        *
*                                                               *
************************* 变更记录 *********************************
*
* 创建者:yongtree  创建日期: 2010-7-7
* 备注:
*
* 修改者:    修改日期:
* 备注:
*
*/
package com.posoftframework.mongodb;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.bson.types.ObjectId;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
/**
*
* @author yongtree
* @date 2010-7-7 下午07:22:15
* @version 1.0
*/
public class MongoServiceImpl implements MongoService {
 private String dbName;
 private String collName;
 private DB db;
 public MongoServiceImpl(String dbName, String collName) {
   this.dbName = dbName;
   this.collName = collName;
   try {
     db = MongoDBConfig.getDBByName(this.dbName);
   } catch (Throwable e) {
     e.printStackTrace();
   }
 }
 public MongoServiceImpl() {
   getDb();
 }
 public DBCollection getCollection() {
   return db.getCollection(this.collName);
 }
 public DBObject map2Obj(Map<String, Object> map) {
   DBObject obj = new BasicDBObject();
   if (map.containsKey("class") && map.get("class") instanceof Class)
     map.remove("class");
   obj.putAll(map);
   return obj;
 }
 public DBObject insert(DBObject obj) {
   getCollection().insert(obj);
   return obj;
 }
 public void insertBatch(List<DBObject> list) {
   if (list == null || list.isEmpty()) {
     return;
   }
   List<DBObject> listDB = new ArrayList<DBObject>();
   for (int i = 0; i < list.size(); i++) {
     listDB.add(list.get(i));
   }
   getCollection().insert(listDB);
 }
 public void delete(DBObject obj) {
   getCollection().remove(obj);
 }
 public void deleteBatch(List<DBObject> list) {
   if (list == null || list.isEmpty()) {
     return;
   }
   for (int i = 0; i < list.size(); i++) {
     getCollection().remove(list.get(i));
   }
 }
 public long getCollectionCount() {
   return getCollection().getCount();
 }
 public long getCount(DBObject obj) {
   if (obj != null)
     return getCollection().getCount(obj);
   return getCollectionCount();
 }
 public List<DBObject> find(DBObject obj) {
   DBCursor cur = getCollection().find(obj);
   return DBCursor2list(cur);
 }
 @Override
 public List<DBObject> find(DBObject query, DBObject sort) {
   DBCursor cur;
   if (query != null) {
     cur = getCollection().find(query);
   } else {
     cur = getCollection().find();
   }
   if (sort != null) {
     cur.sort(sort);
   }
   return DBCursor2list(cur);
 }
 @Override
 public List<DBObject> find(DBObject query, DBObject sort, int start,
     int limit) {
   DBCursor cur;
   if (query != null) {
     cur = getCollection().find(query);
   } else {
     cur = getCollection().find();
   }
   if (sort != null) {
     cur.sort(sort);
   }
   if (start == 0) {
     cur.batchSize(limit);
   } else {
     cur.skip(start).limit(limit);
   }
   return DBCursor2list(cur);
 }
 private List<DBObject> DBCursor2list(DBCursor cur) {
   List<DBObject> list = new ArrayList<DBObject>();
   if (cur != null) {
     list = cur.toArray();
   }
   return list;
 }
 public void update(DBObject setFields, DBObject whereFields) {
   getCollection().updateMulti(setFields, whereFields);
 }
 public List<DBObject> findAll() {
   DBCursor cur = getCollection().find();
   List<DBObject> list = new ArrayList<DBObject>();
   if (cur != null) {
     list = cur.toArray();
   }
   return list;
 }
 public DBObject getById(String id) {
   DBObject obj = new BasicDBObject();
   obj.put("_id", new ObjectId(id));
   DBObject result = getCollection().findOne(obj);
   return result;
 }
 public String getDbName() {
   return dbName;
 }
 public void setDbName(String dbName) {
   this.dbName = dbName;
   this.db = MongoDBConfig.getDBByName(this.dbName);
 }
 public String getCollName() {
   return collName;
 }
 public void setCollName(String collName) {
   this.collName = collName;
 }
 public DB getDb() {
   if (this.db == null) {
     if (this.dbName == null) {
       this.db = MongoDBConfig.getDB();
     } else {
       this.db = MongoDBConfig.getDBByName(this.dbName);
     }
   }
   return this.db;
 }
 public List<String> getAllDBNames() {
   return MongoDBConfig.getDBNames();
 }
}


标签:Java,MongoDB
0
投稿

猜你喜欢

  • python脚本框架webpy模板赋值实现

    2022-07-06 10:46:54
  • 浅谈Python数学建模之整数规划

    2021-12-01 18:26:07
  • mysql基础架构教程之查询语句执行的流程详解

    2024-01-28 21:05:47
  • Django 删除upload_to文件的步骤

    2022-03-23 05:47:14
  • django-rest-framework解析请求参数过程详解

    2023-03-26 18:18:00
  • 离线状态下在jupyter notebook中使用plotly实例

    2022-04-19 18:05:59
  • 对python自动生成接口测试的示例讲解

    2022-06-14 03:24:43
  • 利用Python实现Excel的文件间的数据匹配功能

    2023-12-04 19:53:42
  • Numpy创建NumPy矩阵的简单实现

    2022-08-22 15:08:25
  • 微信小程序实现登陆注册滑块验证

    2023-08-24 17:36:26
  • python集合用法实例分析

    2021-10-26 23:36:37
  • python turtle库画圣诞树详细代码教程

    2022-09-20 10:29:33
  • Python企业编码生成系统之主程序模块设计详解

    2023-11-18 18:44:37
  • 使用 Python 实现简单的 switch/case 语句的方法

    2021-02-02 09:10:16
  • 支持生僻字且自动识别utf-8编码的php汉字转拼音类

    2023-11-14 21:04:40
  • python把转列表为集合的方法

    2021-06-03 07:28:41
  • go开发中引用静态库.a文件的方法

    2024-04-25 13:16:26
  • Python字典中items()函数案例详解

    2021-02-23 04:47:31
  • Python使用三种方法实现PCA算法

    2022-06-26 13:32:49
  • python 中关于pycharm选择运行环境的问题

    2021-09-01 21:56:10
  • asp之家 网络编程 m.aspxhome.com