工具类:
package Utils; import com.google.common.collect.Lists;
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.model.Filters;
import com.mongodb.client.result.UpdateResult;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.bson.Document;
import org.bson.conversions.Bson; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map; public class MongoDBUtil {
private static MongoDBUtil mongoDBUtil; private static final String PLEASE_SEND_IP = "没有传入ip或者端口号";
private static final String PLEASE_INSTANCE_MONGOCLIENT = "请实例化MongoClient";
private static final String PLEASE_SEND_MONGO_REPOSITORY = "请指定要删除的mongo库";
private static final String DELETE_MONGO_REPOSITORY_EXCEPTION = "删除mongo库异常";
private static final String DELETE_MONGO_REPOSITORY_SUCCESS = "批量删除mongo库成功";
private static final String NOT_DELETE_MONGO_REPOSITORY = "未删除mongo库";
private static final String DELETE_MONGO_REPOSITORY = "成功删除mongo库:";
private static final String CREATE_MONGO_COLLECTION_NOTE = "请指定要创建的库";
private static final String NO_THIS_MONGO_DATABASE = "未找到指定mongo库";
private static final String CREATE_MONGO_COLLECTION_SUCCESS = "创建mongo库成功";
private static final String CREATE_MONGO_COLLECTION_EXCEPTION = "创建mongo库错误";
private static final String NOT_CREATE_MONGO_COLLECTION = "未创建mongo库collection";
private static final String CREATE_MONGO_COLLECTION_SUCH = "创建mongo库collection:";
private static final String NO_FOUND_MONGO_COLLECTION = "未找到mongo库collection";
private static final String INSERT_DOCUMEN_EXCEPTION = "插入文档失败";
private static final String INSERT_DOCUMEN_SUCCESSS = "插入文档成功"; private static final Logger logger = Logger.getLogger(MongoDBUtil.class); private MongoDBUtil(){ } private static class SingleHolder{
private static MongoDBUtil mongoDBUtil = new MongoDBUtil();
} public static MongoDBUtil instance(){ return SingleHolder.mongoDBUtil;
} public static MongoDBUtil getMongoDBUtilInstance(){
if(mongoDBUtil == null){
return new MongoDBUtil();
}
return mongoDBUtil;
} /**
* 获取mongoDB连接
* @param host
* @param port
* @return
*/
public MongoClient getMongoConnect(String host,Integer port){ if(StringUtils.isBlank(host) || null == port){
logger.error(PLEASE_SEND_IP);
return null;
} return new MongoClient(host, port);
} /**
* 批量删除mongo库
* @param mongoClient
* @param dbNames
* @return
*/
public String bulkDropDataBase(MongoClient mongoClient,String...dbNames){ if(null == mongoClient) return PLEASE_INSTANCE_MONGOCLIENT; if(null==dbNames || dbNames.length==0){
return PLEASE_SEND_MONGO_REPOSITORY;
}
try {
Arrays.asList(dbNames).forEach(dbName -> mongoClient.dropDatabase(dbName));
logger.info(DELETE_MONGO_REPOSITORY_SUCCESS);
}catch (Exception e){
e.printStackTrace();
logger.error(DELETE_MONGO_REPOSITORY_EXCEPTION);
}
return dbNames == null ? NOT_DELETE_MONGO_REPOSITORY:DELETE_MONGO_REPOSITORY + String.join(",",dbNames);
} /**
* 创建指定database的collection
* @param mongoClient
* @param dbName
* @param collections
* @return
*/
public String createCollections(MongoClient mongoClient,String dbName,String...collections){ if(null == mongoClient) return PLEASE_INSTANCE_MONGOCLIENT; if(null==collections || collections.length==0){
return CREATE_MONGO_COLLECTION_NOTE;
} MongoDatabase mongoDatabase = mongoClient.getDatabase(dbName);
if(null == mongoDatabase) return NO_THIS_MONGO_DATABASE; try {
Arrays.asList(collections).forEach(collection -> mongoDatabase.createCollection(collection));
logger.info(CREATE_MONGO_COLLECTION_SUCCESS);
return collections == null ? NOT_CREATE_MONGO_COLLECTION:CREATE_MONGO_COLLECTION_SUCH + String.join(",",collections);
}catch (Exception e){
e.printStackTrace();
logger.error(CREATE_MONGO_COLLECTION_EXCEPTION);
} return null;
} /**
* 获取MongoCollection
* @param mongoClient
* @param dbName
* @param collection
* @return
*/
public MongoCollection<Document> getMongoCollection(MongoClient mongoClient,String dbName,String collection){ if(null == mongoClient) return null; if(StringUtils.isBlank(dbName)) return null; if(StringUtils.isBlank(collection)) return null; MongoDatabase mongoDatabase = mongoClient.getDatabase(dbName); MongoCollection<Document> collectionDocuments = mongoDatabase.getCollection(collection); if(null == collectionDocuments) return null; return collectionDocuments;
} /**
* 获取到MongoClient
* @param ip
* @param port
* @param userName
* @param dbName
* @param psw
* @returnMongoClient
*/
public static MongoClient getMongoClientByCredential(String ip,int port,String userName,String dbName,String psw){
ServerAddress serverAddress = new ServerAddress(ip,port);
List<ServerAddress> addrs = new ArrayList<ServerAddress>();
addrs.add(serverAddress); //MongoCredential.createScramSha1Credential()三个参数分别为 用户名 数据库名称 密码
MongoCredential credential = MongoCredential.createScramSha1Credential(userName, dbName, psw.toCharArray());
List<MongoCredential> credentials = new ArrayList<MongoCredential>();
credentials.add(credential); //通过连接认证获取MongoDB连接
MongoClient mongoClient = new MongoClient(addrs,credentials);
return mongoClient;
} /**
* 插入文档数据
* @param mongoCollection
* @param params
*/
public void insertDoucument(final MongoCollection<Document> mongoCollection, final Map<String,Object> params){
if(null == mongoCollection) return; try {
Document document = new Document();
params.keySet().stream().forEach(field -> document.append(field, params.get(field))); List<Document> documents = Lists.newArrayList();
documents.add(document);
mongoCollection.insertMany(documents);
logger.info(INSERT_DOCUMEN_SUCCESSS);
}catch (Exception e){
e.printStackTrace();
logger.error(INSERT_DOCUMEN_EXCEPTION);
}
} /**
* 更新文档
* @param mongoCollection
* @param conditionParams
* @param updateParams
*/
public void updateDocument(final MongoCollection<Document> mongoCollection,final Map<String,Object> conditionParams,
final Map<String,Object> updateParams
){ if(null == mongoCollection) return; if (null == conditionParams) return; if (null == updateParams) return; Document conditonDocument = new Document();
conditionParams.keySet().stream().filter(p -> null != p).forEach(o -> {
conditonDocument.append(o,conditionParams.get(o));
}); Document updateDocument = new Document();
updateParams.keySet().stream().filter(p -> null != p).forEach(o -> {
updateDocument.append(o,updateParams.get(o));
});
UpdateResult updateResult = mongoCollection.updateMany(conditonDocument,new Document("$set",updateDocument)); System.out.println("修改了:"+updateResult.getModifiedCount()+" 条数据 "); } /**
*删除文档
* @param mongoCollection
* @param multiple
* @param conditionParams
* @return
*/
public long deleteDocument(final MongoCollection<Document> mongoCollection,final boolean multiple,
final Map<String,Object> conditionParams){ if(null == mongoCollection) return 0; if(null == conditionParams) return 0; Document document = new Document(); conditionParams.keySet().stream().filter(p -> null != p).forEach(o -> {
document.append(o,conditionParams.get(o));
}); if(multiple) {
return mongoCollection.deleteMany(document).getDeletedCount();
} //删除文档第一条
return mongoCollection.deleteOne(document).getDeletedCount();
} /**
* 查询文档 带范围查找、分页、排序
* @param mongoCollection
* @param conditionParams
* @param limit
* @param skip
* @param sortParams
*/
public FindIterable<Document> queryDocument(final MongoCollection<Document> mongoCollection, final Map<String,Object> conditionParams,
final Integer limit, final Integer skip, final Map<String,Integer> sortParams,
final Map<String,Integer> gtLtOrOtherParams,final String compareField
){ if(null == mongoCollection) return null; FindIterable<Document> findIterable = mongoCollection.find(); if(null == conditionParams || null == findIterable) return findIterable; Document document = new Document();
conditionParams.keySet().stream().filter(p -> null!=p).forEach(o -> document.append(o,conditionParams.get(o))); findIterable = findIterable.filter(document); MongoCursor<Document> mongoCursor = findIterable.iterator();
while(mongoCursor.hasNext()){
System.out.println(mongoCursor.next());
}
if(null == findIterable || null == gtLtOrOtherParams) return findIterable; Document gtOrLtDoc = new Document();
gtLtOrOtherParams.keySet().stream().filter(p -> null!=p).forEach(o -> gtOrLtDoc.append(o,gtLtOrOtherParams.get(o))); findIterable = findIterable.filter(new Document(compareField,gtOrLtDoc)); if(null == findIterable || null == limit) return findIterable;
findIterable = findIterable.limit(limit); if(null == findIterable || null == skip) return findIterable;
findIterable = findIterable.skip(skip); if(null == sortParams) return findIterable; Document sortDocument = new Document();
sortParams.keySet().stream().filter(p -> null!=p).forEach(o -> sortDocument.append(o,sortParams.get(o))); findIterable = findIterable.filter(sortDocument);
MongoCursor<Document> mongoCursor2 = findIterable.iterator();
while(mongoCursor2.hasNext()){
System.out.println(mongoCursor2.next());
} return findIterable; } /**
* 全文查询
* @param mongoCollection
* @return
*/
public FindIterable<Document> queryDocument(final MongoCollection<Document> mongoCollection
){
if(null == mongoCollection) return null;
FindIterable<Document> findIterable = mongoCollection.find();
return findIterable;
} /**
*带排序的查询
* @param mongoCollection
* @param conditionParams
* @param limit
* @param skip
* @param sortParams
* @return
*/
public FindIterable<Document> queryDocument(final MongoCollection<Document> mongoCollection, final Map<String,Object> conditionParams,
final Integer limit, final Integer skip, final Map<String,Integer> sortParams ){
if(null == mongoCollection) return null;
/**
* 1. 获取迭代器FindIterable<Document>
* 2. 获取游标MongoCursor<Document>
* 3. 通过游标遍历检索出的文档集合
* */
FindIterable<Document> findIterable = mongoCollection.find();
if(null == conditionParams || null == findIterable) return findIterable;
Document document = new Document();
conditionParams.keySet().stream().filter(p -> null!=p).forEach(o -> document.append(o,conditionParams.get(o)));
findIterable = findIterable.filter(document); if(null == findIterable || null == limit) return findIterable;
findIterable = findIterable.limit(limit); if(null == findIterable || null == skip) return findIterable;
findIterable = findIterable.skip(skip); if(null == sortParams) return findIterable; Document sortDocument = new Document();
sortParams.keySet().stream().filter(p -> null!=p).forEach(o -> sortDocument.append(o,sortParams.get(o)));
findIterable = findIterable.sort(sortDocument); return findIterable; } /**
* 查询文档 简单条件查询
* @param mongoCollection
* @param conditionParams
* @return
*/
public FindIterable<Document> queryDocument(final MongoCollection<Document> mongoCollection, final Map<String,Object> conditionParams
){ if(null == mongoCollection) return null; FindIterable<Document> findIterable = mongoCollection.find(); if(null == conditionParams || null == findIterable) return findIterable; Document document = new Document();
conditionParams.keySet().stream().filter(p -> null!=p).forEach(o -> document.append(o,conditionParams.get(o)));
findIterable = findIterable.filter(document); return findIterable; } /**
* 用于输出部分的列信息
* @param documents
*/
public void printDocuments(FindIterable<Document> documents, String[] fields) {
if (fields != null && fields.length > 0) {
int num = 0;
for (Document d : documents) {
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < fields.length; i++) {
if(fields[i].equals("catm")){ }
stringBuilder.append(fields[i] + ": "+d.getString(fields[i])+" ");
}
System.out.println("第" + (++num) + "条数据: " + stringBuilder); }
}
} /**
* 用于输出所有的列信息
* @param documents
*/
public void printDocuments(FindIterable<Document> documents) {
int num = 0;
for (Document d : documents) {
System.out.println("第" + (++num) + "条数据: " + d.toString());
}
} }

  测试类:

public class Mongo {

    public static void main(String[] args) {

        MongoDBUtil mongoDBUtil = MongoDBUtil.getMongoDBUtilInstance();
//MongoClient client = MongoDBUtil.instance().getMongoConnect("127.0.0.1",27017); 连接本地的mongo
MongoClient client = mongoDBUtil.getMongoClientByCredential("127.0.0.1",27017,"my","my","my"); try {
MongoCollection<Document> collection = mongoDBUtil.getMongoCollection(client,"whale","wb0097waterdepartmentbasic"); //1、 简单的条件查询
Map<String,Object> conditionParams = Maps.newHashMap();
conditionParams.put("wbtp","003");
FindIterable<Document> documents = mongoDBUtil.queryDocument(collection,conditionParams);
mongoDBUtil.printDocuments(documents); //插入文档
for(int i=0;i<=100;i++) {
Map<String, Object> params = Maps.newHashMap();
params.put("qq", "zy");
params.put("time", new Date());
params.put("name", "bb" + i);
params.put("num", i);
mongoDBUtil.insertDoucument(collection, params);
} //更改文档
Map<String,Object> condParams = Maps.newHashMap();
condParams.put("description","database");
condParams.put("aa","bbb");
Map<String,Object> updateParams = Maps.newHashMap();
updateParams.put("description","eee");
MongoDBUtil.instance().updateDocument(collection,condParams,updateParams); // //删除文档数据
Map<String,Object> condParams1 = Maps.newHashMap();
condParams.put("qq",1111);
//
MongoDBUtil.instance().deleteDocument(collection,true,condParams1); //复杂的查询文档
Map<String,Object> condParams2 = Maps.newHashMap();
condParams.put("qq","zy");
Map<String,Integer> sortParams = Maps.newHashMap();
sortParams.put("num",-1);
sortParams.put("name",1);
Map<String,Integer> compareParams = Maps.newHashMap();
compareParams.put("$gt",75);
compareParams.put("$lt",83);
FindIterable<Document> documents1 = MongoDBUtil.instance().queryDocument(collection,condParams2,10,0,sortParams,compareParams,"num");
mongoDBUtil.printDocuments(documents1);
} catch (Exception e) {
System.err.println(e.getClass().getName() + ": " + e.getMessage());
} }
}

  

自己的mongodb的CRUD封装的更多相关文章

  1. MongoDB的CRUD操作

    1. 前言 在上一篇文章中,我们介绍了MongoDB.现在,我们来看下如何在MongoDB中进行常规的CRUD操作.毕竟,作为一个存储系统,它的基本功能就是对数据进行增删改查操作. MongoDB中的 ...

  2. MongoDB简单CRUD场景

    MongoDB简单CRUD命令操作 (1)新建数据库:use 数据库名 (2)显示所有数据库:show dbs; (3)新建集合(两种方式)  隐式创建:在创建集合的同时往集合里面添加数据---db. ...

  3. hibernate和mybatis的之CRUD封装差别

    hibernate和mybatis的之CRUD封装差别 以下讲的是基于MVC三层架构. 由于设计架构的差别,hibernate在实际编程中可以把基础的CRUD封装,比如BaseDao类.其它类只要去继 ...

  4. springboot连接mongodb进行CRUD

    springboot连接mongodb进行CRUD的过程: 在执行以下操作前已安装了mongodb并创建了用户和数据库,使用Robo 3T可成功连接. 1.创建springboot项目,加入以下mav ...

  5. Java对MongoDB的CRUD

    https://blog.51cto.com/aiilive/1339058 MongoDB提供的Java操作API可以说是对Mongo数据库命令的Java翻译,熟悉Mongo命令,熟悉Java操作数 ...

  6. 【翻译】MongoDB指南/CRUD操作(四)

    [原文地址]https://docs.mongodb.com/manual/ CRUD操作(四) 1 查询方案(Query Plans) MongoDB 查询优化程序处理查询并且针对给定可利用的索引选 ...

  7. 【翻译】MongoDB指南/CRUD操作(三)

    [原文地址]https://docs.mongodb.com/manual/ CRUD操作(三) 主要内容: 原子性和事务(Atomicity and Transactions),读隔离.一致性和新近 ...

  8. 【翻译】MongoDB指南/CRUD操作(二)

    [原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(二) 主要内容: 更新文档,删除文档,批量写操作,SQL与MongoDB映射图,读隔离(读关 ...

  9. 【翻译】MongoDB指南/CRUD操作(一)

    [原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(一) 主要内容:CRUD操作简介,插入文档,查询文档. CRUD操作包括创建.读取.更新和删 ...

随机推荐

  1. word中编辑论文公式对齐问题

    这里只说在word中编辑公式时,公式居中,编号右对齐的情况. 在编辑公式时,我平时就是右对齐,然后通过敲击空格键进行公式的居中,然而这样并不美观.所以接下来学习一下: 1)首先打开视图-->标尺 ...

  2. Linux系统一些常用命令(持续增加)

    这些命令什么的全是从网上找的,防止忘记,留下来备忘 1.linux服务器如何从另一台服务器拷东西:可以用scp命令scp user@remote.machine:/remote/path /local ...

  3. 前端上传图片回显并用base64编码,后端做解码储存,存储图片路径在.properties文件中配置(以上传身份证照片为例)

    前端页面:<form id="kycForm" enctype="multipart/form-data"> <input type=&quo ...

  4. js 实现仿 淘宝 五星评价 demo

    <style> @font-face { font-family: 'iconfont'; /* project id 247957 */ src: url('//at.alicdn.co ...

  5. 最详细最权威的Android 编码规范

    1. 前言 这份文档参考了 Google Java 编程风格规范和 Google 官方 Android 编码风格规范.该文档仅供参考,只要形成一个统一的风格,见量知其意就可. 1.1 术语说明 在本文 ...

  6. Android Studio删除依赖

    遇到报错 就是要删 ①在build.gradle中删除对应依赖代码(注释了,但是没用??) ②检查工程中的依赖 点击"file">>“project structure ...

  7. adb截图机顶盒

    操作命令如下 1.adb connect 192.168.1.14(连接电视) 2.adb shell /system/bin/screencap -p /data/1.png(截图并命名并存储) 3 ...

  8. 18.17 U-Boot+内核移植

    18.17.1 移植U-Boot-2012.04.08 1.下载.建立source insight工程.编译.烧写.如果无运行分析原因. $ .tar.bz2 $ cd u-boot- $ make ...

  9. 2019.1.17 homework

    1.求两个整型数较大值 #include<stdio.h>int compare_big(int var1,int var2);int main(void){    int big,x,y ...

  10. 代码漏洞扫描描述Cross Site History Manipulation解决办法[dongcoder.com]

    代码漏洞扫描 漏洞描述:Cross Site History Manipulation 简要描述:产品的行为差异或发送不同的反应,在某种程度上暴露了与安全性相关的产品状态,例如特定的操作是否成功.可能 ...