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();
- }
- }
新闻热点
疑难解答