文档章节

java开发之mongodb基础篇

念世安笙
 念世安笙
发布于 2017/08/11 14:33
字数 1078
阅读 3
收藏 0

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++);

            }

        }

    }


 

 

© 著作权归作者所有

共有 人打赏支持
念世安笙
粉丝 0
博文 16
码字总数 14242
作品 0
深圳
【MongoDB for Java】Java操作MongoDB

开发环境: System:Windows IDE:eclipse、MyEclipse 8 Database:mongoDB 开发依赖库: JavaEE5、mongo-2.5.3.jar、junit-4.8.2.jar Email:hoojo_@126.com Blog:http://blog.csdn.net/IB......

underA
2013/05/15
0
0
MyCAT SQL ON MongoDB

概述 可能你在看到这个标题会小小的吃惊,MyCAT 能使用 MongoDB 做数据节点。是的,没错,确实可以。 吼吼吼,让我们开启这段神奇的“旅途”。 本文主要分成四部分: 总体流程,让你有个整体...

wangchen1999
05/02
0
0
Linux环境下将log4j的日志存储到mongoDB

单位有很多java项目,一般上生产的项目日志都是通过log4j打印在本地,平常开发同学要查看日志还要给他们开个专门的FTP,不利于集中维护管理,近日因工作需要,在网上看到相关技术资料,可把l...

基督山伯爵
2013/03/04
0
3
MongoDB 基本操作与MongoDB for JAVA

一、准备工作 1、 下载mongoDB 下载地址:http://www.mongodb.org/downloads 选择合适你的版本 相关文档:http://www.mongodb.org/display/DOCS/Tutorial 2、 安装mongoDB A、 不解压模式: ...

IT_小翼
2013/08/07
0
1
spring MVC 整合mongodb

Spring Mongodb 目录 1 SPRING整合MONGODB 1 1.1 环境准备 1 1.2 包依赖 1 1.3 配置 2 2 案列 5 2.1 SPRING MVC整合MONGODB代码案例 5 1 Spring整合Mongodb 1.1 环境准备 1. mongodb官网 ht...

浅夏
2014/03/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

js 对象赋值 去除关联性。

js 对象操作 对象原型操作 把一个对象A赋值给另一个对象B 并且对象B 修改 不会影响 A对象 我最近在做一个vue 项目的时候,遇到了一个对象的问题。 当我们在项目需要 复制一个对象到另一个对象...

xiaogg
6分钟前
0
0
art-template4.0使用

art-template javascript 模板引擎,官网:https://github.com/aui/art-template 分为原生语法和简洁语法,本文主要是讲简洁语法 基础数据渲染 输出HTML 流程控制 遍历 调用自定义函数方法 ...

不负好时光
6分钟前
0
0
HANA tenant backup

HANA tenant backup Hello, Script from note 1651055 - Scheduling SAP HANA Database Backups in Linux isn't Multi-Tenant complient. I modified script to be able to backup tenant da......

rootliu
8分钟前
0
0
Java并发编程:阻塞队列

本文先讲述一下java.util.concurrent包下提供主要的几种阻塞队列,然后分析了阻塞队列和非阻塞队列的中的各个方法,接着分析了阻塞队列的实现原理,最后给出了一个实际例子和几个使用场景。 ...

Java小铺
11分钟前
0
0
mysql8添加用户帐户

版本8.0 MySQL 8.0参考手册 / ... / 添加用户帐户 6.3.2添加用户帐户 要创建MySQL帐户,请使用用于创建帐户和建立其权限的帐户管理语句,例如CREATE USER和 GRANT。这些语句使服务器对基础授...

SunHacker
24分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部