java实现mongo数据库的CRUD操作
2015-12-18 17:02
609 查看
1. 下载mongo-java-driver.jar包至项目中。
2.
3.
4.
5.
6. 其中配置文件支持单机,以及集群的方式。
7. 相关配置文件
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
相关文章推荐
- Java - 强引用、弱引用、软引用、虚引用
- Eclipse中使用Maven创建Servlet3.0 Web 项目
- 安装Hadoop,搭建jdk环境,运行wordcount程序
- java中replace()和replaceAll()区别
- Eclipse 快捷键大全
- 浅析Java异常
- java 抽奖软件
- java后台框架springMvc+OpenJpa 之EntityManager查询特殊用例
- Java泛型<? extends Person>和<? super Man>的理解
- 深入分析JavaWeb Item26 -- MySQL 学习笔记
- 如何让Myeclipse在写代码时显示代码提示
- JavaMail:搜索、过滤接收邮件,删除邮件
- java中的throw与throws的区别
- 各种排序算法(java)
- 利用java反射机制,实现对类的私有变量和私有方法的访问
- Java日期计算之Joda-Time
- JAVA利用XSLT进行格式转换,XML转成自己需要的XML、HTML等。
- Java 正确使用 Volatile 变量
- eclipse安装maven插件
- spring task:annotation-driven 定时任务