文档章节

java开发之mongodb基础篇

念世安笙
 念世安笙
发布于 2017/08/11 14:33
字数 1078
阅读 3
收藏 0
点赞 0
评论 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
博文 9
码字总数 13134
作品 0
深圳
MyCAT SQL ON MongoDB

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

wangchen1999 ⋅ 05/02 ⋅ 0

Spring从MongoDB中下载文件之GridFS

问题 之前提到过以GridFS方式上传问题到MongoDB中:Spring保存文件到MongoDB之GridFS支持。现在需要从Mongodb中读取文件,应该怎么处理类? 解决 Maven 注解mongoDbFactory 获取文件流 Note...

亚林瓜子 ⋅ 06/12 ⋅ 0

MongoDB在spring中xml传统配置

背景 旧项目中依然在使用springmvc的xml传统配置,最近需要使用MongoDB,需要在spring引入MongoDB的连接配置。 解决 配置mongodb数据库 配置mongodb数据工厂 配置mongodb的Template 配置mon...

亚林瓜子 ⋅ 06/12 ⋅ 0

mongodb java的疑惑

mongodb的可视化客户端Studio 3T,好像是基于java的吧。我在Studio 3T里面输入mongodb的命令可以直接执行。但是好像没有在mongo 的java驱动里面找到直接运行命令行的方法啊。...

superbone ⋅ 04/16 ⋅ 0

waylau/new-star-blog

NewStarBlog NewStarBlog is an open source Java blog platform. NewStarBlog 是开源 Java 博客平台。 Technologies 涉及技术 NewStarBlog covers Spring Framework 5, Spring Boot 2, Thym......

waylau ⋅ 04/26 ⋅ 0

ZK7.0.3中从MongoDB下载文件

问题 在完成Spring从MongoDB中下载文件之GridFS之后,现在需要在ZK7.0.3的ViewModel中下载该文件。 思路 先从MongoDB获取到,以及把转化为ZK的Filedownload能够使用的进行文件下载。 实现 导...

亚林瓜子 ⋅ 06/12 ⋅ 0

阿里,百度,腾讯等一线互联网公司中,Java开发的招聘标准

金三银四的跳槽热潮即将过去,在这两个月的跳槽的旺季中,作为互联网行业的三大巨头,百度、阿里巴巴、腾讯对于互联网人才有很大的吸引力,他们的员工也是众多互联网同行觊觎的资深工程师、管...

javaxuexi123 ⋅ 04/20 ⋅ 0

NewStarBlog 发布 1.0 版本,国产开源 Java 博客平台

NewStarBlog 是开源 Java 博客平台。 涉及技术 NewStarBlog 使用了 Spring Framework 5, Spring Boot 2, Thymeleaf, Elasticsearch, Spring Data 等技术。 JDK 8 Gradle 4.5.1 Spring Boot 2......

waylau ⋅ 04/26 ⋅ 0

开源 Java 博客平台 - NewStarBlog

NewStarBlog is an open source Java blog platform. NewStarBlog 是开源 Java 博客平台。 Technologies 涉及技术 NewStarBlog covers Spring Framework 5, Spring Boot 2, Thymeleaf, Elast......

waylau ⋅ 04/26 ⋅ 0

一把双刃剑:关于MongoDB的学习和避坑

  【IT168 评论】MongoDB 是一把双刃剑,它对数据结构的要求并不高。数据通过key-value的形式存储,而value的值可以是字符串,也可以是文档。所以我们在使用的过程中非常方便。正是这种方便...

博客园 ⋅ 05/28 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

博客迁移到 https://www.jianshu.com/u/aa501451a235

博客迁移到 https://www.jianshu.com/u/aa501451a235 本博客不再更新

为为02 ⋅ 30分钟前 ⋅ 0

win10怎么彻底关闭自动更新

win10自带的更新每天都很多,每一次下载都要占用大量网络,而且安装要等得时间也蛮久的。 工具/原料 Win10 方法/步骤 单击左下角开始菜单点击设置图标进入设置界面 在设置窗口中输入“服务”...

阿K1225 ⋅ 今天 ⋅ 0

Elasticsearch 6.3.0 SQL功能使用案例分享

The best elasticsearch highlevel java rest api-----bboss Elasticsearch 6.3.0 官方新推出的SQL检索插件非常不错,本文一个实际案例来介绍其使用方法。 1.代码中的sql检索 @Testpu...

bboss ⋅ 今天 ⋅ 0

informix数据库在linux中的安装以及用java/c/c++访问

一、安装前准备 安装JDK(略) 到IBM官网上下载informix软件:iif.12.10.FC9DE.linux-x86_64.tar放在某个大家都可以访问的目录比如:/mypkg,并解压到该目录下。 我也放到了百度云和天翼云上...

wangxuwei ⋅ 今天 ⋅ 0

PHP语言系统ZBLOG或许无法重现月光博客的闪耀历史[图]

最近在写博客,希望通过自己努力打造一个优秀的教育类主题博客,名动江湖,但是问题来了,现在写博客还有前途吗?面对强大的自媒体站点围剿,还有信心和可能型吗? 至于程序部分,我选择了P...

原创小博客 ⋅ 今天 ⋅ 0

IntelliJ IDEA 2018.1新特性

工欲善其事必先利其器,如果有一款IDE可以让你更高效地专注于开发以及源码阅读,为什么不试一试? 本文转载自:netty技术内幕 3月27日,jetbrains正式发布期待已久的IntelliJ IDEA 2018.1,再...

Romane ⋅ 今天 ⋅ 0

浅谈设计模式之工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻...

佛系程序猿灬 ⋅ 今天 ⋅ 0

Dockerfile基础命令总结

FROM 指定使用的基础base image FROM scratch # 制作base image ,不使用任何基础imageFROM centos # 使用base imageFROM ubuntu:14.04 尽量使用官方的base image,为了安全 LABEL 描述作...

ExtreU ⋅ 昨天 ⋅ 0

存储,对比私有云和公有云的不同

导读 说起公共存储,很难不与后网络公司时代的选择性外包联系起来,但尽管如此,它还是具备着简单和固有的可用性。公共存储的名字听起来也缺乏专有性,很像是把东西直接堆放在那里而不会得到...

问题终结者 ⋅ 昨天 ⋅ 0

C++难点解析之const修饰符

C++难点解析之const修饰符 c++ 相比于其他编程语言,可能是最为难掌握,概念最为复杂的。结合自己平时的C++使用经验,这里将会列举出一些常见的难点并给出相应的解释。 const修饰符 const在c...

jackie8tao ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部