java开发之mongodb基础篇

1 mongodb配置文件:mongo.properties

mongo.dbname = test_db \#\u6570\u636E\u5E93\u540D\u79F0
mongo.password = test_pwd \#\u5BC6\u7801
mongo.username = test_user \#\u7528\u6237\u540D
mongo.host = 127.0.0.1 \#\u4E3B\u673A
mongo.port= 27017 \#\u7AEF\u53E3\u53F7
mongo.connectionsPerHost= 8 \#\u4E00\u4E2A\u7EBF\u7A0B\u53D8\u4E3A\u53EF\u7528\u7684\u6700\u5927\u963B\u585E\u6570
mongo.threadsAllowedToBlockForConnectionMultiplier= 4 \#\u7EBF\u7A0B\u961F\u5217\u6570,\u5B83\u4EE5\u4E0A\u9762connectionsPerHost\u503C\u76F8\u4E58\u7684\u7ED3\u679C\u5C31\u662F\u7EBF\u7A0B\u961F\u5217\u6700\u5927\u503C
mongo.connectTimeout= 1500 \#\u8FDE\u63A5\u8D85\u65F6\u65F6\u95F4\uFF08\u6BEB\u79D2\uFF09
mongo.maxWaitTime= 1500 \#\u6700\u5927\u7B49\u5F85\u65F6\u95F4
mongo.autoConnectRetry= true \#\u81EA\u52A8\u91CD\u8FDE
mongo.socketKeepAlive= true \#scoket\u4FDD\u6301\u6D3B\u52A8
mongo.socketTimeout=1500 \#scoket\u8D85\u65F6\u65F6\u95F4
mongo.slaveOk=true \#\u8BFB\u5199\u5206\u79BB

 

2:读取配置文件的工具类:PropertiesReader.java

package com.vst.defend.common.util;



import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.util.Properties;





import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.springframework.core.io.Resource;







public class PropertiesReader {



private static final Log logger = LogFactory.getLog(PropertiesReader.class);

private static Properties prop;

private Resource resource;

public void initial() throws IOException {

prop = new Properties();

prop.load(this.resource.getInputStream());

// 启动文件刷新线程,进行定时刷新文件配置信息

FlushThread flush = new FlushThread();

flush.start();

}

public void setResource(Resource resource) {

this.resource = resource;

}

public static String getProperty(String key) {

return prop.getProperty(key);

}

public static void setProperty(String key, String value){

prop.setProperty(key, value);

}

/**

* 更新配置线程

* @date 2014-9-5 下午02:29:28

* @description 

* @version

*/

private class FlushThread extends Thread{

@Override

public void run(){

while(true){

FileInputStream fis = null;

try {

String path = Thread.currentThread().getContextClassLoader().getResource("config.properties").getPath();

File file = new File(path);

if(file.exists()){

fis = new FileInputStream(file);

Properties p = new Properties();

p.load(fis);

prop.putAll(p);

}

} catch (Exception e) {

logger.error("Update config.properties thread error. ERROR:" + e.getMessage());

} finally {

// 关闭流

VstTools.closeStream(fis);

try {

// 每两分钟读取一次

Thread.sleep(2*60*1000);

} catch (InterruptedException e) {

logger.error("Thread sleep error. ERROR:" + e.getMessage());

}

}

}

}

}

}

 

 

3  新建一个mongodb的工具类 DBProxy.java

package com.vst.defend.common.dao;



import java.util.List;



import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.bson.Document;



import com.mongodb.BasicDBObject;

import com.mongodb.MongoClient;

import com.mongodb.client.AggregateIterable;

import com.mongodb.client.FindIterable;

import com.mongodb.client.MongoCollection;

import com.mongodb.client.MongoDatabase;

import com.mongodb.client.model.UpdateOptions;

import com.mongodb.client.result.DeleteResult;

import com.mongodb.client.result.UpdateResult;

import com.vst.defend.common.util.PropertiesReader;

import com.vst.defend.common.util.VstTools;

/**

 * Mongodb代理,可以统一控制

 * @author vst

 */

public class DBProxy {

private static MongoClient client = new MongoClient(PropertiesReader.getProperty("mongo.ip"),VstTools.parseInt(PropertiesReader.getProperty("mongo.port")));

/**

* 日志

*/

private static final Log logger = LogFactory.getLog(DBProxy.class);

/**

* 数据库名

*/

private static String db;

private static DBProxy proxy = new DBProxy();

private static MongoDatabase database;

/*

* 单例

*/

public static DBProxy getProxy(String db){

DBProxy.db = db;

DBProxy.database = client.getDatabase(DBProxy.db);

return proxy;

}

/**

* 插入单条数据

* @param databaseName  数据库名称

* @param collectionName 集合名称

* @param document 要插入的数据

* @return  执行结果

*/

    public boolean insert(String collectionName, Document document){

    boolean result = false;

MongoCollection<Document> collection = database.getCollection(collectionName);

collection.insertOne(document);

result = true;

    return result;

    }

    

    /**

     * 插入多条记录

     * @param databaseName

     * @param collectionName

     * @param list

     */

    public boolean insert(String collectionName,List<? extends Document> list){

    boolean result = false;

    try {

MongoCollection<Document> collection = database.getCollection(collectionName);

collection.insertMany(list);

result = true;

} catch (Exception e) {

logger.error("insert one error message = "+e);

}

    return result;

    }

    

    /**

     * 删除

     * @param databaseName

     * @param collectionName

     * @param condition 删除条件

     * @param many 如果条件匹配到多条记录,是否删除多条  true删除多条,false只删除第一条匹配到的记录

     * @return

     */

    public DeleteResult delete(String collectionName,BasicDBObject condition,boolean many){

    MongoCollection<Document> collection = database.getCollection(collectionName);

    DeleteResult result = null;

    if(many){

    result = collection.deleteMany(condition);

    }else{

    result = collection.deleteOne(condition);

    }

    return result;

    }

    

    /**

     * 查询

     * @param databaseName

     * @param collectionName

     * @param condition 传null,查询所有

     * @return 返回结果迭代器,可以对迭代器进行排序(-1降序,1升序),限定数量(limit)等操作

     */

    public FindIterable<Document> find(String collectionName,BasicDBObject condition){

    MongoCollection<Document> collection = database.getCollection(collectionName);

    FindIterable<Document> result = null;

    if(null!=condition){

    result = collection.find(condition);

    }else{

    result = collection.find();

    }

    return result;

    }

    

    /**

     * 查询记录数

     * @param databaseName

     * @param collectionName

     * @param object 传null,没有任何查询条件

     * @return

     */

    public long count(String collectionName,BasicDBObject condition){

    MongoCollection<Document> collection = database.getCollection(collectionName);

    long result=0;

    if(null!=condition){

    result = collection.count(condition);

    }else{

    result = collection.count();

    }

    return result;

    }

    

    /**

     * 更新

     * @param databaseName

     * @param collectionName

     * @param condition 更新条件

     * @param value 更新值

     * @param upsert 如果不存在记录,是否插入

     * @param many 如果条件匹配到多条记录,是否更新多条  true更新多条,false只更新第一条匹配到的记录

     */

    public UpdateResult update(String collectionName,BasicDBObject condition,Document value,boolean upsert,boolean many){

    MongoCollection<Document> collection = database.getCollection(collectionName);

    UpdateResult result = null;

   

    UpdateOptions options = new UpdateOptions();

    options.upsert(upsert);

    if(many){

    result = collection.updateMany(condition, value, options);

    }else{

    //result = collection.updateOne(condition, value,options);

    result = collection.replaceOne(condition, value, options);

//     collection.bulkWrite(arg0)

    }

    return result;

    }

    /**

     * 获得连接

     * @param collectionName

     * @return

     */

    public MongoCollection<Document> getCollection(String collectionName){

    return database.getCollection(collectionName);

    }

    

    /**

     * 查询结果集

     * @param collectionName

     * @param args

     * @return

     */

    public AggregateIterable<Document> find2(String collectionName, List<Document> args){

    MongoCollection<Document> collection = database.getCollection(collectionName);

    return collection.aggregate(args);

    }

    /**

     * 查询记录数

     * @param collectionName

     * @param args

     * @return

     */

    @SuppressWarnings("unused")

    public int count2(String collectionName, List<Document> args){

    int result = 0;

AggregateIterable<Document> iters = find2(collectionName, args);

for(Document doc : iters){

result++;

}

    return result;

    }

}

4:访问mogodb :

  

  String database = PropertiesReader.getProperty("mongo.db");
    DBProxy db = DBProxy.getProxy(database);

 

备注:当然我们也可以用jdbc的方式(姑且称为jdbc方式吧)访问mongdb:

public static void main(String[] args) {

        MongoClient client = new MongoClient("localhost",27017);

    //    String database = PropertiesReader.getProperty("mongo.db");

        MongoDatabase mongoDatabase = client.getDatabase("vst_action_dc");

        //DBProxy db = DBProxy.getProxy(database);

        BasicDBObject cdPermission = new BasicDBObject();

        cdPermission.put("pkg","net.myvst.v2");

        //得到用户所有权限下所有的模块

        MongoCollection<Document> collection = mongoDatabase.getCollection(VST_SYS_PERMISSION);

        FindIterable<Document> userPermision = collection.find(cdPermission);

        String[] pkgArr={"com.vst.itv52.v1","com.vst.live","com.love.tuidan","com.vst.box.launcher"};

        //MongoCollection<Document> collection = mongoDatabase.getCollection("VST_SYS_PERMISSION");

         

        int i=0;

        for(String pkg : pkgArr){

            for(Document doc : userPermision){

                System.out.println(doc);

                Document doc2 = new Document();

                doc2.put("vst_role_id", doc.get("vst_role_id"));

                doc2.put("vst_module_id", doc.get("vst_module_id"));

                doc2.put("vst_button_id", doc.get("vst_button_id"));

                doc2.put("pkg",pkg);

                collection.insertOne(doc2);

                System.out.println(i++);

            }

        }

    }


 

 

转载于:https://my.oschina.net/u/3647049/blog/1506547

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值