由于最近项目要使用mongodb来处理一些日志,提前学习了一下mongodb的一些基本用法,大概写了一些常用的。

开发环境为:WIN7-64,JDK7-64,MAVEN3.3.9-64,IDEA2017-64.

程序基本结构为:

下面贴出核心代码示例:

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>TestWebProjectMaven</groupId><artifactId>TestWebProjectMaven</artifactId><packaging>war</packaging><version>1.0-SNAPSHOT</version><name>TestWebProjectMaven Maven Webapp</name><!-- 设定主仓库 --><repositories><!-- nexus私服 --><repository><id>nexus-repos</id><name>Team Nexus Repository</name><url>http://192.168.200.205:8081/nexus/content/groups/public/</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository></repositories><!-- 设定插件仓库 --><pluginRepositories><pluginRepository><id>nexus-repos</id><name>Team Nexus Repository</name><url>http://192.168.200.205:8081/nexus/content/groups/public/</url><releases><enabled>true</enabled></releases><snapshots><enabled>true</enabled></snapshots></pluginRepository></pluginRepositories><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>4.1.6.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.1.6.RELEASE</version></dependency><dependency><groupId>org.mongodb</groupId><artifactId>mongo-java-driver</artifactId><version>3.2.1</version></dependency><dependency><groupId>org.jetbrains</groupId><artifactId>annotations-java5</artifactId><version>RELEASE</version></dependency><dependency><groupId>commons-configuration</groupId><artifactId>commons-configuration</artifactId><version>1.10</version></dependency></dependencies><build><finalName>TestWebProjectMaven</finalName><!-- 设置properties文件编译到target目录中,不然读取不到配置文件 --><resources><resource><directory>src/main/java</directory><includes><include>**/*.properties</include></includes></resource><resource><directory>src/main/resources</directory></resource></resources></build>
</project>

mongodb.properties

MONGODB_IP=192.168.200.234
MONGODB_PORT=10143
MONGODB_DATABASE_NAME=runoob
MONGODB_COLLECTION_NAME=test

MongodbUtil

package org.mbox.util;
import com.mongodb.MongoClient;
import com.mongodb.client.*;
import com.mongodb.client.model.Filters;
import com.mongodb.client.model.UpdateOptions;
import com.mongodb.client.result.DeleteResult;
import org.apache.commons.configuration.CompositeConfiguration;
import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.bson.Document;
import org.bson.conversions.Bson;
import org.bson.types.ObjectId;
import org.mbox.model.PageVO;
import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.*;
/*** Created by pc on 2017/6/5.*/
public class MongodbUtil {private static MongoClient MONGODB_CLIENT = null;private static String MONGODB_IP = null;private static Integer MONGODB_PORT = null;private static String MONGODB_DATABASE_NAME = null;private static String MONGODB_COLLECTION_NAME = null;static{CompositeConfiguration compositeConfiguration = new CompositeConfiguration();try {compositeConfiguration.addConfiguration(new PropertiesConfiguration("mongodb.properties"));} catch (ConfigurationException e) {e.printStackTrace();}MONGODB_IP = compositeConfiguration.getString("MONGODB_IP");MONGODB_PORT = compositeConfiguration.getInt("MONGODB_PORT");MONGODB_DATABASE_NAME = compositeConfiguration.getString("MONGODB_DATABASE_NAME");MONGODB_COLLECTION_NAME = compositeConfiguration.getString("MONGODB_COLLECTION_NAME");MONGODB_CLIENT = new MongoClient(MONGODB_IP,MONGODB_PORT);}private MongodbUtil() {}/*** 初始化mongodb数据源* @return*/public static MongoDatabase getMongodbDatabase(){return MONGODB_CLIENT.getDatabase(MONGODB_DATABASE_NAME);}/*** 关闭MongoClient连接*/public static void closeMongodbClient(){if(null != MONGODB_CLIENT){MONGODB_CLIENT.close();MONGODB_CLIENT = null;}}/*** 获取mongodb的表对象* @return*/public static MongoCollection<Document> getMongoCollection(){return getMongodbDatabase().getCollection(MONGODB_COLLECTION_NAME);}/*** 通过map插入一条数据到表中* @param map*/public static void insertOneCollectionByMap(Map<String,Object> map){getMongoCollection().insertOne(handleMap(map));}/*** 通过集合map一次性插入多条数据到表中* @param listMap*/public static void insertManyCollectionByMap(List<Map<String,Object>> listMap){List<Document> list = new ArrayList<Document>();for(Map<String,Object> map : listMap){Document document = handleMap(map);list.add(document);}getMongoCollection().insertMany(list);}/*** 通过实体对象插入一条数据到表中* @param obj*/public static void insertOneCollectionByModel(Object obj){getMongoCollection().insertOne(handleModel(obj));}/*** 通过集合实体对象一次性插入多条数据到表中* @param listObj*/public static void insertManyCollectionByModel(List<Object> listObj){List<Document> list = new ArrayList<Document>();for(Object obj : listObj){Document document = handleModel(obj);list.add(document);}getMongoCollection().insertMany(list);}/*** 通过手工拼接条件获取查询结果集* 下面是拼接queryDocument例子* document = new Document();* 要注意value中的数据类型* document.append("num",new Document("$eq",20));//相等* document.append("num",new Document("$age",20));//不相等* document.append("num",new Document("$gt",20));//大于* document.append("num",new Document("$gte",21));//大于等于* document.append("num",new Document("$lte",21));//小于等于* document.append("num",new Document("$lt",21));//小于* 下面是或的写法* List<Document> documentList = new ArrayList<Document>();* documentList.add(new Document("num",1));* documentList.add(new Document("num",2));* document.append("$or",documentList);* @param queryDocument* @param sortDocument* @param pageVO* @return*/public static String queryCollectionByCondition(Document queryDocument,Document sortDocument,PageVO pageVO){if(null == queryDocument || null == sortDocument || null == pageVO){return null;}else{String returnList = getQueryCollectionResult(queryDocument,sortDocument,pageVO);return returnList;}}/*** 通过不定条件map查询出表中的所有数据,只限于等于的条件* @param map* @param sortDocument* @param pageVO* @return*/public static String queryCollectionByMap(Map<String,Object> map,Document sortDocument,PageVO pageVO){String sql = getQueryCollectionResult(handleMap(map),sortDocument,pageVO);return sql;}/*** 通过不定条件实体对象obj查询出表中的所有数据,只限于等于的条件* @param obj* @param sortDocument* @param pageVO* @return*/public static String queryCollectionByModel(Object obj,Document sortDocument,PageVO pageVO){String sql = getQueryCollectionResult(handleModel(obj),sortDocument,pageVO);return sql;}/*** 接收Document组装的查询对象,处理子集查询结果并以JSON的形式返回前端* @param queryDocument* @param sortDocument* @param pageVO* @return*/private static String getQueryCollectionResult(Document queryDocument,Document sortDocument,PageVO pageVO){FindIterable<Document> findIterable = getMongoCollection().find(queryDocument).sort(sortDocument).skip((pageVO.getPageNum()-1)*pageVO.getPageSize()).limit(pageVO.getPageSize());MongoCursor<Document> mongoCursor = findIterable.iterator();StringBuilder sql = new StringBuilder();Integer lineNum = 0;while(mongoCursor.hasNext()){sql.append("{");Document documentVal = mongoCursor.next();Set<Map.Entry<String,Object>> sets = documentVal.entrySet();Iterator<Map.Entry<String,Object>> iterators = sets.iterator();while(iterators.hasNext()){Map.Entry<String,Object> map = iterators.next();String key = map.getKey();Object value = map.getValue();sql.append("\"");sql.append(key);sql.append("\"");sql.append(":");sql.append("\"");sql.append((value == null ? "" : value));sql.append("\",");}sql.deleteCharAt(sql.lastIndexOf(","));sql.append("},");lineNum++;}//这里判断是防止上述没值的情况if(sql.length() > 0){sql.deleteCharAt(sql.lastIndexOf(","));}String returnList = getFinalQueryResultsSql(lineNum,sql.toString());return returnList;}/*** 拼接返回前端的JSON串* @param lineNum   子集中JSON的条数* @param querySql  子集中的所有结果JSON* @return*/private static String getFinalQueryResultsSql(Integer lineNum,String querySql) {StringBuilder sql = new StringBuilder();sql.append("{");sql.append("\"");sql.append("jsonRoot");sql.append("\"");sql.append(":");sql.append("\"");sql.append(lineNum);sql.append("\",");sql.append("\"");sql.append("jsonList");sql.append("\"");sql.append(":");sql.append("[");sql.append(querySql);sql.append("]");sql.append("}");return sql.toString();}/*** 以list的形式获取mongdb库中的所有表* @return*/public static List<String> getALLCollectionNameOfList(){List<String> list = new ArrayList<String>();MongoIterable<String> mongoIterable = getMongodbDatabase().listCollectionNames();for(String name : mongoIterable){list.add(name);}return list;}/*** 以map的形式获取mongdb库中的所有表* @return*/public static Map<String,String> getALLCollectionNameOfMap() {Map<String,String> map = new HashMap<String,String>();MongoIterable<String> mongoIterable = getMongodbDatabase().listCollectionNames();for(String name : mongoIterable){map.put(name,name);}return map;}/*** 获取表中的数据条数* @param queryDocument 传null为查询表中所有数据* @return*/public static Integer queryCollectionCount(Document queryDocument){int count = (int) getMongoCollection().count(queryDocument);return count;}/*** 通过表ID获取某条数据* @param id* @return*/public static String queryCollectionModelById(String id){ObjectId objectId = new ObjectId(id);//注意在处理主键问题上一定要用ObjectId转一下Document document = getMongoCollection().find(Filters.eq("_id",objectId)).first();return (document == null ? null : document.toJson());}/*** 根据ID更新某一条数据* @param id          查询条件主键ID* @param updateMap   更新内容,如果是此ID中不存在的字段,那么会在此ID对应的数据中加入新的字段内容* 注意这里跟updateOptions.upsert(ifInsert);没关系*/public static void updateCollectionById(String id,Map<String,Object> updateMap){Document queryDocument = new Document();ObjectId objId = new ObjectId(id);//注意在处理主键问题上一定要用ObjectId转一下queryDocument.append("_id", objId);Document updateDocument = handleMap(updateMap);getMongoCollection().updateOne(queryDocument,new Document("$set",updateDocument));}/*** 根据某几个字段更新多条数据,document的条件拼接可参考queryCollectionByCondition方法* @param queryDocument      查询条件,一定不要加_id,根据ID处理的话参考updateCollectionById方法* @param updateDocument     更新内容,当查询条件和更新内容有出入并且ifInsert为true时才插入* @param ifInsert           数据不存在是否插入,true插入,false不插入*/public static void updateCollectionByCondition(Document queryDocument,Document updateDocument,BooleanifInsert){UpdateOptions updateOptions = new UpdateOptions();updateOptions.upsert(ifInsert);getMongoCollection().updateMany(queryDocument,new Document("$set",updateDocument),updateOptions);}/*** 根据ID删除某一条数据* @param id* @return*/public static Integer deleteCollectionById(String id){ObjectId objectId = new ObjectId(id);Bson bson = Filters.eq("_id",objectId);DeleteResult deleteResult = getMongoCollection().deleteOne(bson);int count = (int) deleteResult.getDeletedCount();return count;}/*** 根据MAP删除表中的某些数据* @param map*/public static void deleteCollectionByMap(Map<String,Object> map){getMongoCollection().deleteMany(handleMap(map));}/*** 根据实体对象删除表中的某些数据* @param obj*/public static void deleteCollectionByModel(Object obj){getMongoCollection().deleteMany(handleModel(obj));}/*** 根据预先手工拼接的document删除表中的某些数据* @param document*/public static void deleteCollectionByDocument(Document document){getMongoCollection().deleteMany(document);}/*** 通过实体对象obj拼接document* @param obj* @return*/private static Document handleModel(Object obj){Document document = null;if(obj != null){document = new Document();try {Class clz = obj.getClass();Field fields[] = clz.getDeclaredFields();for(Field field : fields){String fieldName = field.getName();PropertyDescriptor propertyDescriptor = new PropertyDescriptor(fieldName,clz);Method method = propertyDescriptor.getReadMethod();Object fieldValue = method.invoke(obj);document.append(fieldName,(fieldValue == null ? "" : fieldValue));}} catch (IntrospectionException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (InvocationTargetException e) {e.printStackTrace();}}else{document = new Document("","");}return document;}/*** 通过集合map拼接document* @param map* @return*/private static Document handleMap(Map<String,Object> map){Document document = null;if(null != map){document = new Document();Set<String> sets = map.keySet();Iterator<String> iterators = sets.iterator();while(iterators.hasNext()){String key = iterators.next();Object value = map.get(key);document.append(key,(value == null ? "" : value));}}else{document = new Document("","");//这种设置查询不到任何数据}return document;}/*** 删除某个库* @param databaseName*/public static void dropDatabase(String databaseName){MONGODB_CLIENT.dropDatabase(databaseName);}/*** 删除某个库中的某个表* @param databaseName* @param collectionName*/public static void dropCollection(String databaseName,String collectionName){MONGODB_CLIENT.getDatabase(databaseName).getCollection(collectionName).drop();}/*** 下述方式个人并不推荐,没有直接用document直接拼串方便*/public static void testquery(){List<Integer> list = new ArrayList<Integer>();list.add(20);list.add(21);list.add(22);FindIterable<Document> findIterable =//getMongoCollection().find(Filters.and(Filters.lt("num",22),Filters.gt("num",17)));//getMongoCollection().find(Filters.in("num",17,18));getMongoCollection().find(Filters.nin("num",list));MongoCursor<Document> mongoCursor = findIterable.iterator();while(mongoCursor.hasNext()){Document document = mongoCursor.next();System.out.println(document.toJson());}}
}

转载于:https://blog.51cto.com/ylcodes01/1933342

java封装Mongodb3.2.1工具类相关推荐

  1. java封装统一返回结果工具类(CommonResultUtils)

    1. 在common模块下创建子模块common_utils 2.common_utils 模块内定义返回状态码接口以及返回结果类 返回状态码: /*** 定义返回状态码*/ public inter ...

  2. java inputtools_Java后台开发常用工具类

    本文涉及的工具类部分是自己编写,另一部分是在项目里收集的.工具类涉及数据库连接.格式转换.文件操作.发送邮件等等.提高开发效率,欢迎收藏与转载. 数据库连接工具类 数据库连接工具类--仅仅获得连接对象 ...

  3. 封装一个邮件发送工具类,一个字,巴适

    系列文章目录 文章目录 系列文章目录 前言 一. 介绍 二.二话不说开始干 1.引入库 2. 邮件发送实体(Mail) 3. 邮件发送类型枚举(MailType ) 4.邮件发送抽象类(Abstrac ...

  4. ( 持续更新,目前含 200+ 工具类 ) DevUtils 是一个 Android 工具库, 主要根据不同功能模块,封装快捷使用的工具类及 API 方法调用。

    DevUtils GitHub About ( 持续更新,目前含 200+ 工具类 ) Roadmap DevUtils 是一个 Android 工具库,主要根据不同功能模块,封装快捷使用的工具类及 ...

  5. 第十三天 - 封装JDBC操作Hive工具类 - HWI配置与使用 - JavaWeb结合Hive

    第十三天 - 封装JDBC操作Hive工具类 - HWI配置与使用 - JavaWeb结合Hive 第十三天 - 封装JDBC操作Hive工具类 - HWI配置与使用 - JavaWeb结合Hive ...

  6. java 项目中常用的工具类总结

    1.文件 1.根据图片的链接,下载图片 package com.lingxu.module.BigDataJoinMessage.util;import java.io.FileOutputStrea ...

  7. Java各种方式加解密工具类

    文章目录 前言 1.AES 2.DES 3.BCrypt 4.Http Basic 5.MD5 6.RSA 7.SHA256 8.SM3 9.SM4 前言 JAVA能够实现各种加解密方式,这里对各种加 ...

  8. Java:封装的概念,UML类图,构造方法,this关键字,static关键字,方法重载,包package

                     oop三大特性:封装,继承,多态 oop一般指面向对象程序设计(一种计算机编程架构) 一.封装的概念:    将东西包在一起,然后以新的完整形式呈现出来       ...

  9. java 兼容excel_Java解析Excel工具类(兼容xls和xlsx)

    依赖jar org.apache.poi poi-ooxml 4.0.1 ExcelUtils.java package javax.utils; import java.io.File; impor ...

最新文章

  1. 生存分析-从survdiff函数中提取P值
  2. VMware 虚拟化编程(15) — VMware 虚拟机的恢复方案设计
  3. href 一个正则表达式的解析 ? 号解析
  4. node.js简单爬虫
  5. IIS上配置运行cgi,php,aspx运行环境
  6. Python项目中 封装日志模块logging 及快速调用方法
  7. 《跟菜鸟学Cisco UC部署实战》-上线了(线下培训班开班,见百度云)
  8. linux 设备驱动初学(一)
  9. python在统计中的应用_Python在简单数据统计中的应用--随笔记
  10. Spring RCE 0day高危漏洞预警
  11. 学校计算机教室解说词词,小学各专用教室解说词.doc
  12. OpenCV4 Viz模块使用学习(一)
  13. 817自动控制原理-2-关于阻尼
  14. Defina脚本 - 恶灵塔任务大全
  15. 如何评价 2021 考研政治题,难度如何?
  16. 一个学员去了互联网大厂一个笔试题分享
  17. 阿里云学生机服务器开启端口
  18. 标量量化和矢量量化实验
  19. Chrome - Postman interceptor 和Postman bridge安装及启动
  20. 怎么开发数字化供应链系统?数字化供应链系统有什么功能?

热门文章

  1. 基于jquery的无刷新表格分页
  2. asp自动解析网页中的图片地址,并将其保存到本地服务器
  3. opensuse download
  4. iOS抓取日志方式(1)
  5. 渗透测试工作流程渗透测试类型法律边界
  6. python基础教程博客_python基础教程(一)
  7. java 对变量加锁_Java最全锁剖析:独享锁/共享锁+公平锁/非公平锁+乐观锁/悲观锁...
  8. 删除空文件夹 linux,Linux中find批量删除空文件及空文件夹脚本
  9. 电脑有回声_电脑麦克属性调整(用于回声消除)
  10. 【脑电信号分类】脑电信号提取PSD功率谱密度特征