Java操作MongoDB数据库示例分享

   2015-07-07 0
核心提示:MongoDB是一个文档型数据库,是NOSQL家族中最重要的成员之一,以下代码封装了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();
  }
}

 
标签: Java MongoDB
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • 解决JDBC连接MySQL 8时得异常:java.sql.SQLExc
    使用原来基于MySQL 5.1的JDBC代码运行时,报错:java.sql.SQLException: The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTi
    02-10
  • java连接MySQL,SQL server数据库
    java连接MySQL,SQL server数据库
      java连接MySQL:    首先导入jar包文件:       下载地址:http://download.csdn.net/detail/chongzi321/5703641  然后:     1Connection ct = null; 2 Statementsm = null; 3 ResultSet rs = null; 45 try{6 Class.forName("com.mysql
    02-10
  • oracle调用java方法的例子(下面所有代码都是在s
    在Oracle中调用Java程序,注意:java方法必须是static类型的,如果想在JAVA中使用system.out/err输出log.需要在oracle 中执行"call dbms_java.set_output(5000);".一、helloWord1 编写JAVA程序,也是在SQL/PLUS中写,并执行.create or replace and compile Java 
    02-10
  • mybatis的报错总结_____2Error updating database.  Cause: java.sql.SQLSyntaxErrorException: You have an err
    mybatis的报错总结_____2Error updating databa
    在编写动态sql时 trim的属性写错了,如下图:错误示范:(接口的xml配置文件中:)1update id="modifyBill" parameterType="Bill"2 update smbms_bill3 trim suffix="set" prefixOverrides="," prefix="where id=#{id}"4 if test="billCode!=null"
    02-10
  • Oracle java.sql.SQLException: The Networ
    网络适配器无法建立连接出现这个问题可能是oracl服务没有打开或者是配置的数据库连接的信息:驱动类、连接地址、用户名、密码不对win+r  输入Regedit    查找到Oracle服务
    02-10
  • sql查询报java.sql.SQLException: Column '
    报java.sql.SQLException: Column 'LC_ID' not found 的错误实际上是mysql在hibernate别名的问题我的查询sql是 String sql2 ="select lc.lc_id  lcId from Uum_Logincheck lc ";信息: Server startupin 13441 msselect lc.LC_ID lcId fromUum_Logincheck lc
    02-10
  • 【Oracle】ORACLE SQL Developer不支持JAVA版本
        今天我打开 ORACLE SQL Developer准备开始练手。没有想到却给出了错误提示。 我 是安装了java JDK的而且是1.6版本的。我可能选择了bin目录下面的java.exe文件,原本觉得这样的操作应该是没有问题的结果还是出现了错误。具体错误信息如 下:不支持的ja
    02-10
  • java.sql.SQLException: No value specified fo
    public boolean updateMemberslnfo(MembersInfo membersInfo) throws SQLException{StringBuffer sqlBuffer = new StringBuffer("UPDATE membersinfo SET ");boolean check = true;ListObject params = new ArrayListObject();if(membersInfo.getMname()!=nul
    02-10
  • java.sql.SQLException: No suitable driver fo
    激动的心,颤抖的手。本来web项目数据库连接的好好地,突然就连不上了,一直报java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:错误(未找到数据库驱动),今天终于解决了,记录一下,免得忘了下次再出错又浪费超长时间。1、检
    02-10
  • java.lang.ClassCastException: oracle.sql.TIM
    http://***.com/questions/13269564/java-lang-classcastexception-oracle-sql-timestamp-cannot-be-cast-to-java-sql-ti
    02-10
点击排行