网络编程
位置:首页>> 网络编程>> 数据库>> Java操作MongoDB数据库示例分享

Java操作MongoDB数据库示例分享

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

标签:Java,MongoDB

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();
 }
}


0
投稿

猜你喜欢

  • 方法一1. 下载MySQL源码分发包,不用区分操作系统,我们需要的东西是一样的;2. 重命名自己的mysql的data目录下的mysql文件
  • 很多年以前,面对上古时代遗留的 HTML 发出的腐臭,我捂住鼻子唉声叹气。刚练熟 web 标准的我,恨不得寝其尸食其肉,把一切推翻重来。但经
  • XML有很多相关的技术,将这些技术结合起来,才能充分发挥XML的强大功能。这些技术包括:Xlink与Xpointer(设置XML的超链接)、
  • 一、何谓ASP缓存/为什么要缓存当你的web站点采用asp技术建立的初期,可能感觉到的是asp * 页技术带来的便利性,以及随意修改性、自如
  • 今早打开 腾讯ISD的博客 ,看到一篇新的文章,《迷你屋视觉规范简介》,赶紧看了来学习。不过给我抓到问题咯,臭鱼不介意我在这说下吧:这套规范
  • 压缩数据库文件可以提高数据库的性能,但是有些时候在压缩数据库时,系统会提醒用户该数据库不能压缩。如果在Access数据库中删除数据库对象,或
  • asp数字分页涵数参数说明:SQL: 查询语句,PageSizeN: 每页显示多少新闻记录classid: 栏目ID,PageCountS:
  • Image and text elements that appear in another element are called floa
  • vbscript中,错误处理使用on error resume next来完成,如果在你的代码里加入这一句,在这句之后的其他代码如果出现错误
  • 可能是我“火星”了,不过在 空虚 的 Blog 中学到的一招。这个技巧的原理是利用 iframe 载入本机各盘符的根目录,然后判断 ifra
  • 管理SQL Server内在的帐户和密码时,我们很容易认为这一切都相当的安全。但实际上并非如此。在这里,我们列出了一些对于SQL Serve
  • 当“ 页面重构工程师 ”这个职位的面试官也蛮长一段时间了,跟前两年比起来,总的来说来应聘的同学能力在很大程度上有了提高,记得两年前的一场招聘
  •  Mootools 1.2手风琴(Accordion)教程原文地址:30 Days of Mootools 1.2 Tutoria
  • XML被设计用来描述数据,其焦点是数据的内容。HTML被设计用来显示数据,其焦点是数据的外观。    
  • 今天在看罗素的《西方哲学史》时,忽然想到了这个想法,我认为可以从另外一个角度来看“用户体验“的影响因素。上面这个图是我今天思考的一部分,这是
  • 网站内容的入口很大一部分都是依赖于导航系统,而网站的入口很大一部分依赖于搜索系统,这也在一定意义上证明了导航与搜索之间的重叠性。搜索系统可以
  • 概述:本控件使用 html+css+javascript模拟HTML内置的select元素,实现其部分方法与属性,也增加了一部分功能,并且从
  • 淘宝的投诉类型里有这么一条“收款不发货”。帮助中心里是这么解释的:买、卖双方在淘宝上成交后,当卖家在收到买家汇款后没有按时履行发货义务,或买
  • 最近心血来潮加上有点闲情,动手写了第一个JavaScript版的俄罗斯方块Easy Tetris.先上Easy Tetris俄罗斯方块游戏截
  • 假如不使用INSTEAD OF触发器或可更新分区视图而是通过视图来修改数据,那么再修改之前,请考虑下列准则:◆如果在视图定义中使用了 WIT
手机版 网络编程 asp之家 www.aspxhome.com