java操作mongoDB

来源:互联网 发布:erp软件是什么 编辑:程序博客网 时间:2024/03/29 10:10

其实任何新的数据持久化的方式对于使用者都有两步   1创建连接   2管理数据

1.创建连接: 重要的是  Mongo对象  和  DB对象

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配置类 *   */public class MongoDBConfig {private static Mongo mongo;private static DB db;//连接信息private static final String MONGO_DB_ADDRESS = "....";private static final int MONGO_DB_PORT = 1111;private static final String MONGO_DB_USERNAME = "...";private static final String MONGO_DB_PASSWORD = "...";private static final String MONGO_DB_DBNAME = "...";//连接信息文件存放位置private static final String MONGO_DB_RESOURCE_FILE = "mongodb.cfg.properties";/** * Mongo数据库参数 */private static Map<String, String> cfgMap = new HashMap<String, String>();/** * 数据库存储 DB对象 */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;}/** * 将连接参数  存储在cfgMap中 */@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");//根据地址 address  和 端口port获取mongo对象mongo = new Mongo(address, port);if (dbName != null && !"".equals(dbName)) {//根据mongo对象获取DB对象db = mongo.getDB(dbName);if (username != null && !"".equals(username)) {//验证身份db.authenticate(username, password.toCharArray());}//将DB对象存储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;}}

2.对数据进行操作  mongodb中每一条数据就是一个DBObject   所以操作起来也很简单  在操作某个表的数据时  必须先根据表明获取该表的对象

import java.util.ArrayList;import java.util.List;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import com.mongodb.DBCollection;import com.mongodb.DBCursor;import com.mongodb.DBObject;/** * 基础的MongoDB操作类 */public class BaseMongoDB {private static Log logger = LogFactory.getLog(BaseMongoDB.class); /** * 获得Collection (表名) *  * @param collectionNameCollection名称(表名称) * @return */public DBCollection getDBCollection(String collectionName) {logger.debug(MongoDBConfig.getDB().getCollection(collectionName));return MongoDBConfig.getDB().getCollection(collectionName);}/** * 添加对象到相应的Collection *  * @param collectionNameCollection名称(表名称) * @param obj存储的数据对象 * @return */public DBObject insert(String collectionName, DBObject obj) {getDBCollection(collectionName).insert(obj);return obj;}/** * 批量添加数据到Collection中 *  * @param collectionNameCollection的名称(集合名称) * @param objList数据的列表集合 */public void insertBatch(String collectionName, List<DBObject> objList) {if (null == objList || objList.isEmpty()) {return;}getDBCollection(collectionName).insert(objList);}/** * 删除实体 *  * @param collectionNameCollection名称(表名) * @param obj对象 */public void delete(String collectionName, DBObject obj) {getDBCollection(collectionName).remove(obj);}/** * 查询 * @param collectionNameCollection名称(表名) * @param obj对象 * @return */public List<DBObject> find(String collectionName, DBObject obj) {logger.debug("FIND-->>>>>" + collectionName);DBCursor dbCursor = getDBCollection(collectionName).find(obj);return DBCursor2List(dbCursor);}/** * 查询并排序 * @param collectionNameCollection名称(表名) * @param query查询条件 * @param sort排序方式 * @return */public List<DBObject> find(String collectionName,DBObject query, DBObject sort) {DBCursor cur;if (query != null) {cur = getDBCollection(collectionName).find(query);} else {cur = getDBCollection(collectionName).find();}if (sort != null) {cur.sort(sort);}return DBCursor2List(cur);}/** * 查询 * @param collectionName集合名称 * @param query查询条件 * @param sort排序 * @param start页码 * @param limit分页大小 * @return */public List<DBObject> find(String collectionName,DBObject query, DBObject sort, int start,int limit) {DBCursor cur;if (query != null) {cur = getDBCollection(collectionName).find(query);} else {}if (sort != null) {cur.sort(sort);}if (start == 0) {cur.batchSize(limit);} else {cur.skip(start).limit(limit);}return DBCursor2List(cur);}/** * 将DB游标转换为List * @param cur游标 * @return */private List<DBObject> DBCursor2List(DBCursor cur) {List<DBObject> list = new ArrayList<DBObject>();if (cur != null) {list = cur.toArray();}return list;}}
数据的操作类 基本完成了