java 实现操作mongodb的连接,增删查改

mongodb的jar包下载 

java mongodb 驱动 
https://oss.sonatype.org/content/repositories/releases/org/mongodb/mongodb-driver/3.4.1/ 
我下载的是(mongo-java-driver-3.0.1.jar)

java 实现mongodb的连接关闭操作,写一个mongodbHelper

package com.java.dao;

import com.mongodb.MongoClient;

import com.mongodb.client.MongoDatabase;

public class MongoHelper {

        static final String DBName = "weibo";
        static final String ServerAddress = "127.0.0.1"; 
        static final int PORT = 27017;

        public MongoHelper(){
        }

        public MongoClient getMongoClient( ){
            MongoClient mongoClient = null;
            try {
                  // 连接到 mongodb 服务
                mongoClient = new MongoClient(ServerAddress, PORT); 
                System.out.println("Connect to mongodb successfully");
            } catch (Exception e) {
                System.err.println(e.getClass().getName() + ": " + e.getMessage());
            }
            return mongoClient;
        }

        public MongoDatabase getMongoDataBase(MongoClient mongoClient) {  
            MongoDatabase mongoDataBase = null;
            try {  
                if (mongoClient != null) {  
                      // 连接到数据库
                    mongoDataBase = mongoClient.getDatabase(DBName);  
                    System.out.println("Connect to DataBase successfully");
                } else {  
                    throw new RuntimeException("MongoClient不能够为空");  
                }  
            } catch (Exception e) {  
                e.printStackTrace();  
            }
            return mongoDataBase;
        }  

        public void closeMongoClient(MongoDatabase mongoDataBase,MongoClient mongoClient ) {  
            if (mongoDataBase != null) {  
                mongoDataBase = null;  
            }  
            if (mongoClient != null) {  
                mongoClient.close();  
            }  
            System.out.println("CloseMongoClient successfully");  

        }  
}

连接成功后进行增删查改操作 
这是基本增删查改的接口

package com.java.dao;

import java.util.Map;


import org.bson.Document;

import com.mongodb.BasicDBObject;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoDatabase;

/**
 * Dao 层接口
 * 
 */
public interface MongoDao {
    /**
     * Get Data BY ID
     * 
     * @param db
     * @param table
     * @param Id
     * @throws Exception 
     */
    public Map queryByID(MongoDatabase db, String table, Object Id) throws Exception;

    /**
     * Insert Data
     * 
     * @param db
     * @param table
     * @param document
     */
    public boolean insert(MongoDatabase db, String table, Document doc);

    /**
     * Delete Many Data.if doc is empty will delete all Data
     * 
     * @param db
     * @param table
     * @param document
     */
    public boolean delete(MongoDatabase db, String table, BasicDBObject doc);

    /**
     * Update All Data
     * 
     * @param db
     * @param table
     * @param oldDoc
     * @param newDoc
     */
    public boolean update(MongoDatabase db, String table, BasicDBObject oldDoc,
            BasicDBObject newDoc);

}

实现上面的接口并且扩充方法

package com.java.dao;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import org.bson.Document;

import com.java.exception.CustomException;
import com.java.service.JsonStrToMap;
import com.mongodb.BasicDBObject;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;

/**
 * 实现接口
 * @author iiip
 *
 */
public class MongoDaoImpl implements MongoDao {

    @Override
    public Map queryByID(MongoDatabase db, String table, Object Id) throws Exception{
        MongoCollection collection = db.getCollection(table);
        BasicDBObject query = new BasicDBObject("_id", Id);
        //  DBObject接口和BasicDBObject对象:表示一个具体的记录,BasicDBObject实现了DBObject,是key-value的数据结构,用起来和HashMap是基本一致的。
        FindIterable iterable = collection.find(query);

//      for (Document dd : iterable) {
//          int dudu = dd.getInteger("上海"); // 读取响应的数据
//          System.out.println("dudududu:"+dudu);
//      }

        Map jsonStrToMap = null;
        MongoCursor cursor = iterable.iterator();
        while (cursor.hasNext()) {
            Document user = cursor.next();
            String jsonString = user.toJson();
            jsonStrToMap = JsonStrToMap.jsonStrToMap(jsonString);//这里用到我自己写的方法,主要是包json字符串转换成map格式,为后面做准备,方法放在后面
        }
        System.out.println("检索ID完毕");

        return jsonStrToMap;
    }

    /**
     * 根据一个doc,来检索,当doc是空的时候检索全部
     * @param db
     * @param table
     * @param doc
     */
    public List>  queryByDoc(MongoDatabase db, String table, BasicDBObject doc) {
        MongoCollection collection = db.getCollection(table);
        FindIterable iterable = collection.find(doc);
         /** 
         * 1. 获取迭代器FindIterable 
         * 2. 获取游标MongoCursor 
         * 3. 通过游标遍历检索出的文档集合 
         * */  

        List> list = new ArrayList>();
        MongoCursor cursor = iterable.iterator();
        while (cursor.hasNext()) {
            Document user = cursor.next();
            String jsonString = user.toJson();
            Map jsonStrToMap = JsonStrToMap.jsonStrToMap(jsonString);
            list.add(jsonStrToMap);
        }
        System.out.println("检索doc完毕");
        return list;
    }

    /**
     *  检索全部并返回迭代器
     * @param db
     * @param table
     */
    public List> queryAll(MongoDatabase db, String table) {
        MongoCollection collection = db.getCollection(table);
        FindIterable iterable = collection.find();

        List> list = new ArrayList>();
        MongoCursor cursor = iterable.iterator();
        while (cursor.hasNext()) {
            Document user = cursor.next();
            String jsonString = user.toJson();
            Map jsonStrToMap = JsonStrToMap.jsonStrToMap(jsonString);
            list.add(jsonStrToMap);
        }
        System.out.println("检索全部完毕");
        return list;
    }

    /**
     * 便利迭代器FindIterable 
     */
    public void printFindIterable(FindIterable iterable){
        MongoCursor cursor = iterable.iterator();
        while (cursor.hasNext()) {
            Document user = cursor.next();
            System.out.println(user.toJson());
        }
        cursor.close();
    }


    @Override
    public boolean insert(MongoDatabase db, String table, Document document) {
        MongoCollection collection = db.getCollection(table);
        collection.insertOne(document);
        long count = collection.count(document);
//      System.out.println(collection.getNamespace());//weibo.area
//      System.out.println(collection.getClass());//class com.mongodb.MongoCollectionImpl
//      System.out.println(collection.getDocumentClass());//class org.bson.Document
//      System.out.println(collection.getWriteConcern());//WriteConcern{w=1, wtimeout=0, fsync=false, j=false
//      System.out.println(collection.getWriteConcern().getW());//1

        System.out.println("count: "+count);
        if(count == 1){
            System.out.println("文档插入成功");
            return true;
        }else{
            System.out.println("文档插入成功");
            return false;
        }

    }

    /**
     * insert many
     * @param db
     * @param table
     * @param document
     */
    public boolean insertMany(MongoDatabase db, String table, List documents ) {

        MongoCollection collection = db.getCollection(table);
        long preCount = collection.count();
        collection.insertMany(documents);
        long nowCount = collection.count();
        System.out.println("插入的数量: "+(nowCount-preCount));
        if((nowCount-preCount) == documents.size() ){
            System.out.println("文档插入多个成功");
            return true;
        }else{
            System.out.println("文档插入多个失败");
            return false;
        }

    }

    @Override
    public boolean delete(MongoDatabase db, String table, BasicDBObject document) {
        MongoCollection collection = db.getCollection(table);
        DeleteResult deleteManyResult = collection.deleteMany(document);
        long deletedCount = deleteManyResult.getDeletedCount();
        System.out.println("删除的数量: "+deletedCount);
        if(deletedCount > 0){
            System.out.println("文档删除多个成功");
            return true;
        }else{
            System.out.println("文档删除多个失败");
            return false;
        }
    }

    /**
     * 删除一个
     * @param db
     * @param table
     * @param document
     */
    public boolean deleteOne(MongoDatabase db, String table, BasicDBObject document) {
        MongoCollection collection = db.getCollection(table);
        DeleteResult deleteOneResult = collection.deleteOne(document);
        long deletedCount = deleteOneResult.getDeletedCount();
        System.out.println("删除的数量: "+deletedCount);
        if(deletedCount == 1){
            System.out.println("文档删除一个成功");
            return true;
        }else{
            System.out.println("文档删除一个失败");
            return false;
        }
    }


    @Override
    public boolean update(MongoDatabase db, String table, BasicDBObject whereDoc,BasicDBObject updateDoc) {
            MongoCollection collection = db.getCollection(table);  
             UpdateResult updateManyResult = collection.updateMany(whereDoc, new Document("$set",updateDoc)); 
             long modifiedCount = updateManyResult.getModifiedCount();
             System.out.println("修改的数量: "+modifiedCount);

            if (modifiedCount > 0){
                System.out.println("文档更新多个成功");
                return true;
            }else{
                System.out.println("文档更新失败");
                return false;
            }
    }


    /**
     * update one Data
     * @param db
     * @param table
     * @param whereDoc
     * @param updateDoc
     */
    public boolean updateOne(MongoDatabase db, String table, BasicDBObject whereDoc,BasicDBObject updateDoc) {
            MongoCollection collection = db.getCollection(table);  
             UpdateResult updateOneResult = collection.updateOne(whereDoc, new Document("$set",updateDoc)); 
             long modifiedCount = updateOneResult.getModifiedCount();
             System.out.println("修改的数量: "+modifiedCount);
             if(modifiedCount == 1){
                System.out.println("文档更新一个成功");
                 return true;
             }else{
                System.out.println("文档更新失败");
                 return false;
             }
    }
    /**
     * create collection
     * @param db
     * @param table
     */
    public void createCol(MongoDatabase db, String table) {
         db.createCollection(table);
        System.out.println("集合创建成功");
    }

    /**
     * drop a collection
     * @param db
     * @param table
     */
    public void dropCol(MongoDatabase db, String table) {
        db.getCollection(table).drop();
        System.out.println("集合删除成功");

    }

}

前面用到的一个类方法JsonStrToMap.jsonStrToMap

package com.java.service;

import java.util.HashMap;
import java.util.Map;

import com.mongodb.util.JSON;

public class JsonStrToMap {

    /**
     * json 字符串转化为map格式
     * @param jsonString
     * @return
     */

    public static Map jsonStrToMap(String jsonString) {
        Object parseObj = JSON.parse(jsonString); // 反序列化 把json 转化为对象
        Map map = (HashMap) parseObj; // 把对象转化为map
        return map;
    }

}

测试方法

public class MainMonHelperImpl {
	
	public static void main(String[] args) throws Exception {
        MongoHelper mongoHelper = new MongoHelper();
        MongoClient mongoClient = mongoHelper.getMongoClient();
        MongoDatabase mongoDataBase = mongoHelper.getMongoDataBase(mongoClient);
        MongoDaoImpl mongoDaoImpl = new MongoDaoImpl();


// *  直接用BasicDBObject进行CRUD
        
//        Map map = new HashMap<>();
//    	map.put("name", "王");
//    	map.put("sex", 1);
//    	map.put("createTime", new Date());
    	
//        TestMongo page = new TestMongo();
//    	page.setOld("100.0");
//    	page.setSex("1");
//    	page.setUsername("王");
        
//    	JSONObject jsonObject = JSONObject.fromObject(page);
//    	Document document = Document.parse(jsonObject.toString());
//      mongoDaoImpl.insert(mongoDataBase, "dkjl", document);//插入document
//        
//      Object bean = JSONObject.toBean(jsonObject, TestMongo.class);
    	
        List> queryAll = mongoDaoImpl.queryAll(mongoDataBase, "dkjl");
        for (Map map2 : queryAll) {
			System.out.println(JsonStrToMap.jsonMapToStr(map2));
		}
    	
//        mongoDaoImpl.queryByID(mongoDataBase, "dkjl", 1);//检索event_id,注意id类型是字符串还是int
        
//        collection.find(eq("i", 71)
        
        
//      BasicDBObject document2 = new BasicDBObject("likes",1000);
//      document2.append("event_id", "55");
//      mongoDaoImpl.queryByDoc(mongoDataBase, table, document2);//检索doc,可以根据doc(key,value)来查找,当doc是空的时候,检索全部
//        List> queryAll = mongoDaoImpl.queryAll(mongoDataBase, "dkjl"); //查询全部
//        for (Map map2 : queryAll) {
//			System.out.println(JsonStrToMap.jsonMapToStr(map2));
//		}


//      BasicDBObject document3 = new BasicDBObject("likes",200);
//      mongoDaoImpl.delete(mongoDataBase, table, document3);//删除doc 的全部信息,当doc 是空,则删除全部
//      BasicDBObject document3 = new BasicDBObject("likes", 1000);
//      mongoDaoImpl.deleteOne(mongoDataBase, table, document3);//删除doc 的一个信息


//      更新文档   将文档中likes=100的文档修改为likes=200   
//      BasicDBObject whereDoc = new BasicDBObject("likes",1000);
//      BasicDBObject updateDoc = new BasicDBObject("likes",255);
//      mongoDaoImpl.update(mongoDataBase, table, whereDoc, updateDoc);//更新全部,查找到oldDoc的数据,更新newDoc的数据
//      BasicDBObject whereDoc = new BasicDBObject("likes",255);
//      BasicDBObject updateDoc = new BasicDBObject("event_id",205);
//      mongoDaoImpl.updateOne(mongoDataBase, table, whereDoc, updateDoc);//更新全部,查找到oldDoc的数据,更新newDoc的数据




//------------------------------------------------
        /**
         * 使用map 进行CRUD操作
         */


//      System.out.println("测试map");
//      Map areaMap1 = new HashMap();
//      areaMap1.put("_id", 2);
//      areaMap1.put("北京", 5);
//      areaMap1.put("上海", 14);
//      areaMap1.put("广州",8);
//      areaMap1.put("深圳",0.5);




         //把map反序列化
//      System.out.println("map parse: " + JSON.parse(JSON.serialize(areaMap)));  


        // 根据map 到mongodb查询
//     FindIterable queryByDocResult = mongoDaoImpl.queryByDoc(mongoDataBase, areaTable, new BasicDBObject(areaMap1));
//     mongoDaoImpl.printFindIterable(queryByDocResult);




        //   插入map 到mongodb
//      mongoDaoImpl.insert(mongoDataBase, areaTable, new Document(areaMap1));


//      Map areaMap2 = new HashMap();
//      Map areaMap3 = new HashMap();
//      areaMap2.put("_id", 10);
//      areaMap2.put("北京", 5);
//
//      areaMap3.put("_id", 11);
//      areaMap3.put("北京", 5);
//      List docList = new ArrayList();
//      docList.add(new Document(areaMap2));
//      docList.add(new Document(areaMap3));
//      mongoDaoImpl.insertMany(mongoDataBase, areaTable, docList);


        //   根据map 删除mongodb
//      mongoDaoImpl.delete(mongoDataBase, areaTable, new BasicDBObject(areaMap1));
//      mongoDaoImpl.deleteOne(mongoDataBase, areaTable, new BasicDBObject(areaMap1));


        //根据map 更新mongodb
//      Map updateDoc = new HashMap();
//      Map wehereDoc = new HashMap();
//      wehereDoc.put("_id", 4);
//      updateDoc.put("上海",25);
//      mongoDaoImpl.update(mongoDataBase, areaTable, new BasicDBObject(wehereDoc), new BasicDBObject(updateDoc));
//      mongoDaoImpl.updateOne(mongoDataBase, areaTable, new BasicDBObject(wehereDoc), new BasicDBObject(updateDoc));




        //检索全部
//      FindIterable queryAllResult = mongoDaoImpl.queryAll(mongoDataBase, areaTable);
//      mongoDaoImpl.printFindIterable(queryAllResult);
//      mongoHelper.closeMongoClient(mongoDataBase,mongoClient);


    }
}




参考: 
mongoUtil java heleper 
http://blog.csdn.net/guoxingege/article/details/47439581

语法: 
http://www.runoob.com/mongodb/mongodb-java.html

文档 
http://mongodb.github.io/mongo-java-driver/3.0/driver/getting-started/quick-tour/

java mongodb 驱动 
https://oss.sonatype.org/content/repositories/releases/org/mongodb/mongodb-driver/3.4.1/

你可能感兴趣的:(MongoDB,mongodb)