您的位置:首页 > 编程语言 > Java开发

java实现mongo数据库的CRUD操作

2015-12-18 17:02 609 查看
1. 下载mongo-java-driver.jar包至项目中。

2.
package cn.nubia.apps.mongo;

public interface DBTemplate<T> {

public T fetchList(String tableName);

public void insert(String tableName);

}


3.

package cn.nubia.apps.mongo;

import com.mongodb.MongoClientOptions;

public class MongoClientOptionsBuilder {

private int connectionsPerHost;
private boolean autoConnectRetry;
private int threadsAllowed;
private int maxWaitTime;
private int connectTimeout;

public int getConnectionsPerHost() {
return connectionsPerHost;
}
public void setConnectionsPerHost(int connectionsPerHost) {
this.connectionsPerHost = connectionsPerHost;
}
public boolean isAutoConnectRetry() {
return autoConnectRetry;
}
public void setAutoConnectRetry(boolean autoConnectRetry) {
this.autoConnectRetry = autoConnectRetry;
}
public int getThreadsAllowed() {
return threadsAllowed;
}
public void setThreadsAllowed(int threadsAllowed) {
this.threadsAllowed = threadsAllowed;
}
public int getMaxWaitTime() {
return maxWaitTime;
}
public void setMaxWaitTime(int maxWaitTime) {
this.maxWaitTime = maxWaitTime;
}
public int getConnectTimeout() {
return connectTimeout;
}
public void setConnectTimeout(int connectTimeout) {
this.connectTimeout = connectTimeout;
}

public MongoClientOptions build() {

MongoClientOptions.Builder build = new MongoClientOptions.Builder();
//与目标数据库能建立的最大链接数量
build.connectionsPerHost(connectionsPerHost);
//		build.autoConnectRetry(autoConnectRetry);
//当所有的connection都在使用中,则每个connection上可以有threadsAllowed个线程在排队等待中
build.threadsAllowedToBlockForConnectionMultiplier(threadsAllowed);
build.maxWaitTime(maxWaitTime);
build.connectTimeout(connectTimeout);
return build.build();
}

}


4.

package cn.nubia.apps.mongo;

import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.MongoClient;

public class MongoTemplate {

private MongoClient mongoClient;
private String dbName;

public MongoClient getMongoClient() {
return mongoClient;
}
public void setMongoClient(MongoClient mongoClient) {
this.mongoClient = mongoClient;
}
public String getDbName() {
return dbName;
}
public void setDbName(String dbName) {
this.dbName = dbName;
}

public DB getDB() {
return mongoClient.getDB(dbName);
}
public DB getDB(String dbname) {
return mongoClient.getDB(dbname);
}
public DBCollection getDBCollection(String collectionName) {
return getDB().getCollection(collectionName);
}
public DBCollection getDBCollection(String dbName,String collectionName) {
return getDB(dbName).getCollection(collectionName);
}

}


5.

package cn.nubia.apps.mongo;

import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import cn.nubia.apps.test.People;

import com.mongodb.AggregationOutput;
import com.mongodb.BasicDBObject;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.MapReduceCommand.OutputType;
import com.mongodb.MapReduceOutput;

@Component
public class MongoDbTemplate implements DBTemplate<DBObject>{

@Autowired
private MongoTemplate mongoTemplate;

@Override
public DBObject fetchList(String tableName) {

DBCollection db = mongoTemplate.getDBCollection("user");
DBCursor cursor = db.find();
while(cursor.hasNext()) {
DBObject dbo = cursor.next();
System.err.println(dbo.toString());
}

return null;
}

public void insert(String tableName) {

DBCollection db = mongoTemplate.getDBCollection(tableName);
People p = new People();
p.setName("alanlin");
p.setAge(28);
p.setDate(new Date());
db.insert(p);

//		db.ensureIndex("{\"name\":1}");
}

public <T> List<T> mr(String tableName,String map,String reduce,DBObject query) {
DBCollection coll = mongoTemplate.getDBCollection(tableName);
DBCollection result = null;
synchronized (tableName) {
MapReduceOutput mapReduceOutput = coll.mapReduce(map, reduce, tableName + "_result",OutputType.REPLACE,query);
result = mapReduceOutput.getOutputCollection();
}

DBCursor cur = result.find();
while(cur.hasNext()) {
DBObject obj = cur.next();
System.err.println("value=" + obj.get("value").toString());
}
return null;
}

/**
* 数据格式为
* { "_id" : ObjectId("564d7e3b178eb423a2e28928"), "name" : "alanlin", "num" : 10 }
{ "_id" : ObjectId("564d7e42178eb423a2e28929"), "name" : "alanlin1", "num" : 20 }
{ "_id" : ObjectId("564d7e5b178eb423a2e2892a"), "name" : "alanlin2", "num" : 30 }
{ "_id" : ObjectId("564d88de178eb423a2e2892b"), "name" : "alanlin2", "num" : 30 }
{ "_id" : ObjectId("5653ba0b8cdc400b73808160"), "name" : "alanlin2", "num" : 40 }
*
* @param tableName
*/
public void aggregate(String tableName) {
DBCollection coll = mongoTemplate.getDBCollection(tableName);
DBObject match = new BasicDBObject("$match",new BasicDBObject("name","alanlin2"));
DBObject sum = new BasicDBObject();
sum.put("_id", "$num");
sum.put("count", new BasicDBObject("$sum","1"));
DBObject group = new BasicDBObject("$group",sum);

AggregationOutput out = coll.aggregate(group);
String str = out.getCommandResult().toString();
System.err.println("str is " + str);
}

}


6. 其中配置文件支持单机,以及集群的方式。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd">

<bean id="mongoClientOptionsBuilder" class="cn.nubia.apps.mongo.MongoClientOptionsBuilder">
<property name="connectionsPerHost" value="${mongodb.opts.connectionsPerHost}" />
<property name="autoConnectRetry" value="${mongodb.opts.autoConnectRetry}" />
<property name="threadsAllowed" value="${mongodb.opts.threadsAllowed}" />
<property name="maxWaitTime" value="${mongodb.opts.maxWaitTime}" />
<property name="connectTimeout" value="${mongodb.opts.connectTimeout}" />
</bean>
<bean id="mongoClientOptions" class="com.mongodb.MongoClientOptions" factory-bean="mongoClientOptionsBuilder"
factory-method="build">
</bean>
<bean id="mongoDbTemplate" class="cn.nubia.apps.mongo.MongoDbTemplate"></bean>

<!--
<bean id="mongoTemplate" class="cn.nubia.apps.mongo.MongoTemplate">
<property name="mongoClient">
<bean class="com.mongodb.MongoClient">
<constructor-arg index="0">
<bean class="com.mongodb.ServerAddress">
<constructor-arg index="0" value="${mongodb.host}" />
<constructor-arg index="1" type="int" value="${mongodb.port}" />
</bean>
</constructor-arg>
<constructor-arg index="1" ref="mongoClientOptions" />
</bean>
</property>
<property name="dbName" value="${mongodb.db}" />
</bean>
-->

<!-- 副本集群环境 -->
<bean id="mongoTemplate" class="cn.nubia.apps.mongo.MongoTemplate">
<property name="mongoClient">
<bean class="com.mongodb.MongoClient">
<constructor-arg>
<list>
<ref bean="serverAddress"></ref>
<ref bean="serverAddress"></ref>
</list>
</constructor-arg>
</bean>
</property>
<property name="dbName" value="${mongodb.db}" />
</bean>

<bean id="serverAddress" class="com.mongodb.ServerAddress">
<constructor-arg index="0" value="10.204.76.235" />
<constructor-arg index="1" type="int" value="22017" />
</bean>

<bean id="serverAddress1" class="com.mongodb.ServerAddress">
<constructor-arg index="0" value="10.204.76.235" />
<constructor-arg index="1" type="int" value="21017" />
</bean>

</beans>


7. 相关配置文件

mongodb.host=
mongodb.port=
mongodb.db=test

mongodb.opts.connectionsPerHost=50
mongodb.opts.autoConnectRetry=true
mongodb.opts.threadsAllowed=50
mongodb.opts.maxWaitTime=120000
mongodb.opts.connectTimeout=60000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: