MongonDB组件开发,针对MongoDB的api二次开发,便于统一调用、管理。
一、引入POM
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.my.mongodb</groupId>
<artifactId>my-mongodb</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>my-mongodb</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>bson</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
二、配置mongoDB的数据库配置
(1)在Tomcat下 commoncfg/dbconf/文件夹中引入mongodb.properties文件
(2)文件内容如下:
#服务器地址mongodb://开头 服务器地址为mongodb的服务器地址 注意端口及ip是否和你环境一致
mongo.uri=mongodb://127.0.0.1:27017
#每个主机答应的连接数(每个主机的连接池大小),当连接池被用光时,会被阻塞住 ,默以为10 --int
mongo.connectionsPerHost=50
#数据库名
mongo.databaseName=mymongo
三、mongoDB组件java类开发
定义包含初始化数据库、CRUD等功能基础类
package com.my.mongodb.dao;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
import org.bson.Document;
import org.bson.conversions.Bson;
import org.bson.types.ObjectId;
import com.mongodb.BasicDBObject;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoClientOptions.Builder;
import com.mongodb.MongoClientURI;
import com.mongodb.WriteConcern;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.model.Filters;
import com.mongodb.client.result.DeleteResult;
import com.mongodb.client.result.UpdateResult;
import com.my.mongodb.enums.MongoOperation;
/**
* @Title MongoDbDao.java
* @Description MongoDb Dao层服务类
* @author night
* @date 2015年12月30日 上午10:51:06
* @version V1.0
*/
public enum MongoDbDao {
/**
* 定义一个枚举的元素,它代表此类的一个实例
*/
INSTANCE;
private MongoClient mongoClient;
/**
* 指定默认数据库
*/
private static String DEFAULTDBNAME;
/**
* 获取tomcat路径
*/
private static String LOADPATH = "catalina.home";
/**
* mongodb配置文件相对路径
*/
private static String CONFIG_PATH = "commoncfg/dbconf/mongodb.properties";// tomcat 环境地址 catalina.home 值/Users/night/Documents/apache-tomcat-7.0
static {
System.out.println("MongoDb初始化================Begin");
// 获取系统变量
Properties sysProperties = System.getProperties();
// 获取MongoDb配置路径
String uri = sysProperties.getProperty(LOADPATH) + File.separator + CONFIG_PATH;
System.out.println(uri);
// 加载配置路径
Properties properties = new Properties();
// InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(uri);//这种方式按上述路径无法加载到文件
InputStream inputStream = null;
try {
inputStream = new FileInputStream(uri);
System.out.println(inputStream);
properties.load(inputStream);
for(Iterator<Object> itr = properties.keySet().iterator();itr.hasNext();){
String key = (String) itr.next();
System.out.println(key + "=" + properties.get(key));
}
/* 将配置文件中的配置进行对应设置 */
DEFAULTDBNAME = properties.getProperty("mongo.databaseName");
Builder builder = new MongoClientOptions.Builder();
String perHost = properties.getProperty("mongo.connectionsPerHost");
builder.connectionsPerHost(Integer.parseInt(perHost));
builder.writeConcern(WriteConcern.SAFE);// WriteConcern.SAFE:抛出网络错误异常、服务器错误异常;并等待服务器完成写操作。
String clientURI = properties.getProperty("mongo.uri");
if (clientURI == null || "".equals(clientURI)) {
throw new java.lang.IllegalArgumentException("mongo.uri 不能为空!");
}
MongoClientURI mongoClientURI = new MongoClientURI(clientURI,builder);
INSTANCE.mongoClient = new MongoClient(mongoClientURI);
} catch (Exception e) {
throw new RuntimeException("load resource fail, uri:" + uri
+ " errorMsg:" + e.getMessage(), e);
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
System.out.println("MongoDb初始化================end");
}
/**
*
* @Title getCollection
* @Description 获取指定数据库的指定表
* @param dbName
* 数据库名称
* @param collName
* 表名称
* @return {@link }
* @since 2015年12月30日 下午3:13:37
*/
public MongoCollection<Document> getCollection(String dbName,String collName) {
if (null == collName || "".equals(collName)) {
return null;
}
if (null == dbName || "".equals(dbName)) {
return null;
}
MongoCollection<Document> collection = mongoClient.getDatabase(dbName).getCollection(collName);
return collection;
}
/**
*
* @Title getDefaultCollection
* @Description 获取默认数据库表
* @param collName 表名称
* @return
* {@link }
* @since 2015年12月30日 下午4:08:40
*/
public MongoCollection<Document> getDefaultCollection(String collName) {
if (null == collName || "".equals(collName)) {
return null;
}
MongoCollection<Document> collection = mongoClient.getDatabase(DEFAULTDBNAME).getCollection(collName);
return collection;
}
/**
*
* @Title findById
* @Description 通过id查询
* @param coll 表
* @param id 主键 mongodb默认主键名称为‘_id’ 无法修改
* @return
* {@link }
* @since 2015年12月30日 下午3:25:39
*/
public Document findById(MongoCollection<Document> coll, String id) {
ObjectId _idobj = null;
try {
_idobj