Java操作MongoDB數(shù)據(jù)庫(kù)示例分享
MongoDB是一個(gè)文檔型數(shù)據(jù)庫(kù),是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數(shù)據(jù)庫(kù)參數(shù)
*/
private static Map<String, String> cfgMap = new HashMap<String, String>();
private static Hashtable<String, DB> mongoDBs = new Hashtable<String, DB>();
/**
* 初始化Mongo的數(shù)據(jù)庫(kù)
*/
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數(shù)據(jù)庫(kù)
*/
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的實(shí)例
*
* @return
*/
public static Mongo getMongo() {
return mongo;
}
/**
* 得到Mongo的圖片數(shù)據(jù)庫(kù)
*
* @return
*/
public static DB getDB() {
return db;
}
public static List<String> getDBNames() {
return mongo.getDatabaseNames();
}
/**
* 根據(jù)數(shù)據(jù)庫(kù)名稱,得到數(shù)據(jù)庫(kù)<br/>
* 如果不存在,則創(chuàng)建一個(gè)該名稱的數(shù)據(jù)庫(kù),并設(shè)置用戶名和密碼為配置文件中的參數(shù)值</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
/************************* 版權(quán)聲明 *********************************
* *
* 版權(quán)所有:百洋軟件 *
* Copyright (c) 2010 by www.po-soft.com *
* *
************************* 變更記錄 *********************************
*
* 創(chuàng)建者:yongtree 創(chuàng)建日期: 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();
/**
* 根據(jù)數(shù)據(jù)集合的Map,插入數(shù)據(jù) map的key對(duì)應(yīng)數(shù)據(jù)庫(kù)中的DBCollection的key值
*
* @param obj
*/
public abstract DBObject insert(DBObject obj);
/**
* 根據(jù)List<Map<String,Object>>結(jié)構(gòu)的數(shù)據(jù)集合,插入數(shù)據(jù)
*
* @param list
*/
public abstract void insertBatch(List<DBObject> list);
/**
* 按照條件參數(shù)集合map,刪除數(shù)據(jù)
*
* @param map
*/
public abstract void delete(DBObject obj);
/**
* 按照多種條件的并集,批量刪除數(shù)據(jù)
*
* @param list
*/
public abstract void deleteBatch(List<DBObject> list);
/**
* 得到Collection()總的記錄數(shù)
*
* @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);
/**
* 根據(jù)whereFields參數(shù),更新setFields值
*
* @param setFields
* @param whereFields
*/
public abstract void update(DBObject setFields,
DBObject whereFields);
public abstract List<DBObject> findAll();
/**
* 根據(jù)ID找到唯一數(shù)據(jù) 有1個(gè)id字段標(biāo)記
*
* @param id
* @return
*/
public abstract DBObject getById(String id);
/**
* 獲取所有數(shù)據(jù)庫(kù)名稱
*
* @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
/************************* 版權(quán)聲明 *********************************
* *
* 版權(quán)所有:百洋軟件 *
* Copyright (c) 2010 by www.po-soft.com *
* *
************************* 變更記錄 *********************************
*
* 創(chuàng)建者:yongtree 創(chuàng)建日期: 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();
}
}
相關(guān)文章
Ubuntu 14.04 安裝 MongoDB 及 PHP MongoDB Driver詳細(xì)介紹
這篇文章主要介紹了Ubuntu 14.04 安裝 MongoDB 及 PHP MongoDB Driver詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2016-10-10
MongoDB學(xué)習(xí)筆記之MapReduce使用示例
這篇文章主要介紹了MongoDB學(xué)習(xí)筆記之MapReduce使用示例,本文直接給出實(shí)例代碼,需要的朋友可以參考下2015-07-07
mongodb設(shè)置后臺(tái)運(yùn)行的方法
這篇文章主要介紹了mongodb設(shè)置后臺(tái)運(yùn)行的方法,本文同時(shí)給出了關(guān)閉已在后臺(tái)運(yùn)行mongodb的方法,需要的朋友可以參考下2014-09-09
MongoDB學(xué)習(xí)筆記之GridFS使用介紹
這篇文章主要介紹了MongoDB學(xué)習(xí)筆記之GridFS使用介紹,本文介紹了GridFS的作用、GridFS的一些使用方法、GridFS實(shí)現(xiàn)原理及注意事項(xiàng)等,需要的朋友可以參考下2015-07-07
MongoDB憑什么躋身數(shù)據(jù)庫(kù)排行前五
MongoDB以比去年同期超出65.96分的成績(jī)繼續(xù)雄踞榜單前五,這個(gè)增幅在全榜僅次于PostgreSQL的77.99,而其相對(duì)于4月份的6.10分的增長(zhǎng)也是僅次于微軟SQL Server排名全榜第二2019-06-06
springboot整合mongodb?changestream的示例代碼
Chang?Stream(變更記錄流)?是指collection(數(shù)據(jù)庫(kù)集合)的變更事件流,應(yīng)用程序通過db.collection.watch()這樣的命令可以獲得被監(jiān)聽對(duì)象的實(shí)時(shí)變更,本文給大家介紹springboot整合mongodb?changestream的示例代碼,感興趣的朋友一起看看吧2022-02-02

