文档章节

java开发之mongodb基础篇

念世安笙
 念世安笙
发布于 2017/08/11 14:33
字数 1078
阅读 4
收藏 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++);

            }

        }

    }


 

 

© 著作权归作者所有

共有 人打赏支持
上一篇: swagger简介
下一篇: 笔记
念世安笙
粉丝 0
博文 18
码字总数 14406
作品 0
深圳
私信 提问
MongoDB最简单的入门教程之三 使用Java代码往MongoDB里插入数据

前两篇教程我们介绍了如何搭建MongoDB的本地环境: MongoDB最简单的入门教程之一 环境搭建 以及如何用nodejs读取MongoDB里的记录: MongoDB最简单的入门教程之二 使用nodejs访问MongoDB 这篇...

JerryWang_SAP
10/23
0
0
MyCAT SQL ON MongoDB

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

wangchen1999
05/02
0
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
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

没有更多内容

加载失败,请刷新页面

加载更多

《TCP/IP详解 卷1:协议》第3章 IP:网际协议

3.1 引言 IP是TCP/IP协议族中最为核心的协议。所有的TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输(见图1-4)。许多刚开始接触TCP/IP的人对IP提供不可靠、无连接的数据报传送服务感到很奇怪...

开元中国2015
9分钟前
1
0
如何创建高质量的TypeScript声明文件(七) - 该做什么和不该做什么

转载 如何创建高质量的TypeScript声明文件(七) - 该做什么和不该做什么 该做什么和不该做什么 一般类型 数字,字符串,布尔值和对象 不要使用Number,String,Boolean或Object类型。 这些类型...

durban
26分钟前
1
0
(6)添加vue-cookie

#(6)添加vue-cookie 1 安装vue-cookie cnpm install --save vue-cookie 2 引入 在main.js中进行引入: import Vue from 'vue' //这句是原来就有的import VueCookie from 'vue-cookie'Vue......

neumeng
34分钟前
1
0
node安装cnpm

npm install -g cnpm --registry=https://registry.npm.taobao.org

笑丶笑
今天
4
0
OSChina 周三乱弹 —— 夜半回家,推门不动

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @胖达panda :分享陶晶莹/张雨生的单曲《我期待》 《我期待》- 陶晶莹/张雨生 手机党少年们想听歌,请使劲儿戳(这里) @cc_z :熬夜一时爽,...

小小编辑
今天
1K
16

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部