java中mongodb中dao通用_MongoDB之Java測试代码(DAO层)

MongoInit.java是数据库初始化及连接类

MongoUtils.java是对mongodb的各种操作方法

MongoInit.java

package com.wlwcloud.datatest;

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.net.UnknownHostException;

import java.util.Properties;

import org.apache.log4j.Logger;

import com.mongodb.DB;

import com.mongodb.DBCollection;

import com.mongodb.Mongo;

import com.mongodb.MongoOptions;

import com.mongodb.ServerAddress;

/**

* Mongo工具类:设计为单例模式,每当月份发生变化,数据库连接名称就会发生变化,这是业务规则 因MongoDB的Java驱动是线程安全的,对于一般的应用,仅仅要一个Mongo实例就可以,Mongo有个内置的连接池(池大小默觉得10个)。

* 对于有大量写和读的环境中,为了确保在一个Session中使用同一个DB时,我们能够用下面方式保证一致性: DB mdb =mongo.getDB('dbname'); mdb.requestStart(); // 业务代码 mdb.requestDone();

* DB和DBCollection是绝对线程安全的

* @author undoner

*/

public class MongoInit {

/** DB监听端口号 */

private static int DBPort = 27017;

/** DB连接URL */

private static String DBUrl = "localhost";

/** 连接DB库名称 */

private static String DBName = "wlwdb";

static Logger log = Logger.getRootLogger();

private static Mongo mongo;

private static DBCollection coll;

private static DB db;

static {

try {

DBproperties();

MongoOptions options = new MongoOptions();

options.autoConnectRetry = true;

options.connectionsPerHost = 1000;

options.maxWaitTime = 5000;

options.socketTimeout = 0;

options.connectTimeout = 15000;

options.threadsAllowedToBlockForConnectionMultiplier = 5000;

// 其实,Mongo实例代表了一个数据库连接池,即使在多线程的环境中,一个Mongo实例对我们来说已经足够了

ServerAddress serverAddress = new ServerAddress(DBUrl, DBPort);

mongo = new Mongo(serverAddress, options);

} catch (UnknownHostException e) {

log.info("get mongo instance failed");

}

}

static void DBproperties() {

// 读取配置文件config.properties中的属性值

String myFilePath = MongoInit.class.getResource("/").getPath() + "MongoDBConfig.properties";

Properties properties = new Properties();

FileInputStream fileInputStream = null;

try {

fileInputStream = new FileInputStream(myFilePath);

properties.load(fileInputStream);

DBPort = Integer.parseInt((String) properties.getProperty("DBPort"));

DBUrl = (String) properties.getProperty("DBUrl");

DBName = (String) properties.getProperty("DBName");

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

fileInputStream.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

public static DB getDB() {

if (db == null) {

db = mongo.getDB(DBName);

}

return db;

}

public static Mongo getMong() {

return mongo;

}

public static DBCollection getColl(String collname) {

return getDB().getCollection(collname);

}

}

MongoUtils.java

package com.wlwcloud.datatest;

import java.net.UnknownHostException;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

import java.util.Set;

import java.util.regex.Pattern;

import com.fasterxml.jackson.core.JsonProcessingException;

import com.fasterxml.jackson.databind.ObjectMapper;

import com.ketayao.ketacustom.entity.main.User;

import com.ketayao.utils.SecurityUtils;

import com.mongodb.AggregationOutput;

import com.mongodb.BasicDBList;

import com.mongodb.BasicDBObject;

import com.mongodb.BasicDBObjectBuilder;

import com.mongodb.DB;

import com.mongodb.DBCollection;

import com.mongodb.DBCursor;

import com.mongodb.DBObject;

import com.mongodb.MapReduceCommand;

import com.mongodb.MapReduceOutput;

import com.mongodb.Mongo;

import com.mongodb.MongoException;

import com.mongodb.QueryBuilder;

import com.mongodb.WriteConcern;

public class MongoUtils {

//DBCursor cursor = coll.find(condition).addOption(Bytes.QUERYOPTION_NOTIMEOUT);//设置游标不要超时

/**

* 获取全部数据库实例

*/

public void testGetDBS() {

List dbnames = MongoInit.getMong().getDatabaseNames();

for (String dbname : dbnames) {

System.out.println("dbname:" + dbname);

}

}

/**

* 删除数据库

*/

public void dropDatabase(String dbname) {

MongoInit.getMong().dropDatabase(dbname);

}

/**

* 查询全部表名

*/

public void getAllCollections() {

Set colls = MongoInit.getDB().getCollectionNames();

for (String s : colls) {

System.out.println("Collections:"+s);

}

}

/**

* 删除一个表

*/

public void dropCollection(String collection) {

MongoInit.getColl(collection).drop();

}

/**

* 加入一条记录

*/

public void addData(String dbCollection,String dataID,String dataTime,String dataContent,String dataStatus) {

DBCollection coll = MongoInit.getColl(dbCollection);

BasicDBObject doc = new BasicDBObject();

doc.put("id", dataID);

doc.put("time", dataTime);

doc.put("data", dataContent);

doc.put("status", dataStatus);

coll.insert(doc);

// 设定write concern,以便操作失败时得到提示

coll.setWriteConcern(WriteConcern.SAFE);

findOne(dbCollection);

}

/**

* 创建索引

*/

public void createIndex(String collection) {

MongoInit.getColl(collection).createIndex(new BasicDBObject("index_id", 1));

}

/**

* 获取索引信息

*/

public void getIndexInfo(String dbCollection) {

List list = MongoInit.getColl(dbCollection).getIndexInfo();

for (DBObject o : list) {

System.out.println(o);

}

}

/**

* 加入多条记录

*/

public void addMultiData() {

for (int i = 0; i < 100; i++) {

MongoInit.getColl("wujintao").insert(

new BasicDBObject().append("i", i));

}

List docs = new ArrayList();

for (int i = 0; i < 50; i++) {

docs.add(new BasicDBObject().append("i", i));

}

MongoInit.getColl("wujintao").insert(docs);

// 设定write concern,以便操作失败时得到提示

MongoInit.getColl("wujintao").setWriteConcern(WriteConcern.SAFE);

}

/**

* 查找第一条记录

*/

public void findOne(String dbCollection) {

DBObject myDoc = MongoInit.getColl(dbCollection).findOne();

System.out.println(myDoc);

}

/**

* 获取表中全部记录条数

*/

public void count(String dbCollection) {

System.out.println(MongoInit.getColl(dbCollection).getCount());

System.out.println(MongoInit.getColl(dbCollection).count());

}

/**

* 获取查询结果集的记录数

*/

public void getCount(String dbCollection,String dataID) {

DBObject query = new BasicDBObject("id", dataID);

long count = MongoInit.getColl(dbCollection).count(query);

System.out.println(count);

}

/**

* 查询全部结果

*/

public void getAllDocuments(String dbCollection) {

DBCursor cursor = MongoInit.getColl(dbCollection).find();

try {

while (cursor.hasNext()) {

System.out.println(cursor.next());

}

} finally {

cursor.close();

}

}

/**

* 依照一个条件查询

*/

public void queryByConditionOne() {

BasicDBObject query = new BasicDBObject();

query.put("name", "MongoDB");

DBCursor cursor = MongoInit.getColl("wujintao").find(query);

try {

while (cursor.hasNext()) {

System.out.println(cursor.next());

}

} finally {

cursor.close();

}

}

public List queryById(String id) {

User user = SecurityUtils.getLoginUser();

BasicDBObject query = new BasicDBObject();

System.out.print(id);

query.put("id", id);

String table="table_";

DBCursor cursor = MongoInit.getColl("table_"+user.getUsername()).find(query);

List list=cursor.toArray();

System.out.println(list.size());

System.out.println("dao.."+list.toString());

List sensordata=new ArrayList();

for(int i=1;i

{

String sid=(String)list.get(i).get("id");

String stime=(String)list.get(i).get("time");

String sdata=(String)list.get(i).get("data");

String status=(String)list.get(i).get("status");

String sstatus;

if(status.equals("0"))sstatus="正常";

else if(status.equals("1")) sstatus="删除";

else sstatus="未知状态";

SensorData a=new SensorData(sid,stime,sdata,sstatus);

//System.out.print(a.getData()+a.getId()+a.getStatus()+a.getTime());

sensordata.add(a);

}

return sensordata;

/* try {

while (cursor.hasNext()) {

System.out.println(cursor.next());

}

} finally {

cursor.close();

} */

}

/**

* AND多条件查询,区间查询

*/

public void queryMulti() {

BasicDBObject query = new BasicDBObject();

// 查询j不等于3,k大于10的结果集

query.put("j", new BasicDBObject("$ne", 3));

query.put("k", new BasicDBObject("$gt", 10));

DBCursor cursor = MongoInit.getColl("wujintao").find(query);

try {

while (cursor.hasNext()) {

System.out.println(cursor.next());

}

} finally {

cursor.close();

}

}

/**

* 区间查询

* select * from table where i >50

*/

public void queryMulti2() {

BasicDBObject query = new BasicDBObject();

query = new BasicDBObject();

query.put("i", new BasicDBObject("$gt", 50)); // e.g. find all where i >

DBCursor cursor = MongoInit.getColl("wujintao").find(query);

try {

while (cursor.hasNext()) {

System.out.println(cursor.next());

}

} finally {

cursor.close();

}

}

/**

* 区间查询

* select * from table where 20 < i <= 30

//比較符

//"$gt": 大于

//"$gte":大于等于

//"$lt": 小于

//"$lte":小于等于

//"$in": 包括

*/

public void queryMulti3() {

BasicDBObject query = new BasicDBObject();

query = new BasicDBObject();

query.put("i", new BasicDBObject("$gt", 20).append("$lte", 30));

DBCursor cursor = MongoInit.getColl("wujintao").find(query);

try {

while (cursor.hasNext()) {

System.out.println(cursor.next());

}

} finally {

cursor.close();

}

}

/**

* 组合in和and select * from test_Table where (a=5 or b=6) and (c=5 or d = 6)

*/

public void queryMulti4() {

BasicDBObject query11 = new BasicDBObject();

query11.put("a", 1);

BasicDBObject query12 = new BasicDBObject();

query12.put("b", 2);

List orQueryList1 = new ArrayList();

orQueryList1.add(query11);

orQueryList1.add(query12);

BasicDBObject orQuery1 = new BasicDBObject("$or", orQueryList1);

BasicDBObject query21 = new BasicDBObject();

query21.put("c", 5);

BasicDBObject query22 = new BasicDBObject();

query22.put("d", 6);

List orQueryList2 = new ArrayList();

orQueryList2.add(query21);

orQueryList2.add(query22);

BasicDBObject orQuery2 = new BasicDBObject("$or", orQueryList2);

List orQueryCombinationList = new ArrayList();

orQueryCombinationList.add(orQuery1);

orQueryCombinationList.add(orQuery2);

BasicDBObject finalQuery = new BasicDBObject("$and",

orQueryCombinationList);

DBCursor cursor = MongoInit.getColl("wujintao").find(finalQuery);

}

/**

* IN查询

* if i need to query name in (a,b); just use { name : { $in : ['a', 'b'] } }

* select * from things where name='a' or name='b'

* @param coll

*/

public void queryIn() {

BasicDBList values = new BasicDBList();

values.add("a");

values.add("b");

BasicDBObject in = new BasicDBObject("$in", values);

DBCursor cursor = MongoInit.getColl("wujintao").find(

new BasicDBObject("name", in));

try {

while (cursor.hasNext()) {

System.out.println(cursor.next());

}

} finally {

cursor.close();

}

}

/**

* 或查询

* select * from table where name = '12' or title = 'p'

* @param coll

*/

public void queryOr() {

QueryBuilder query = new QueryBuilder();

query.or(new BasicDBObject("name", 12), new BasicDBObject("title", "p"));

DBCursor cursor = MongoInit.getColl("wujintao").find(query.get()).addSpecial("$returnKey", "");

try {

while (cursor.hasNext()) {

System.out.println(cursor.next());

}

} finally {

cursor.close();

}

}

public void customQueryField() throws UnknownHostException{

Mongo mongo = new Mongo("localhost", 27017);

DB db = mongo.getDB("zhongsou_ad");

BasicDBObjectBuilder bulder = new BasicDBObjectBuilder();

bulder.add("times",1);

bulder.add("aid",1);

DBCursor cusor = db.getCollection("ad_union_ad_c_1").find(new BasicDBObject(),bulder.get());

for (DBObject dbObject : cusor) {

System.out.println(dbObject);

}

}

public void mapReduce() throws UnknownHostException{

Mongo mongo = new Mongo("localhost", 27017);

DB db = mongo.getDB("zhongsou_ad");

/***

* book1 = {name : "Understanding JAVA", pages : 100}

* book2 = {name : "Understanding JSON", pages : 200}

* db.books.save(book1)

* db.books.save(book2)

* book = {name : "Understanding XML", pages : 300}

* db.books.save(book)

* book = {name : "Understanding Web Services", pages : 400}

* db.books.save(book)

* book = {name : "Understanding Axis2", pages : 150}

* db.books.save(book)

*

var map = function() {

var category;

if ( this.pages >= 250 )

category = 'Big Books';

else

category = "Small Books";

emit(category, {name: this.name});

};

var reduce = function(key, values) {

var sum = 0;

values.forEach(function(doc) {

sum += 1;

});

return {books: sum};

};

var count = db.books.mapReduce(map, reduce, {out: "book_results"});

*/

try {

DBCollection books = db.getCollection("books");

BasicDBObject book = new BasicDBObject();

book.put("name", "Understanding JAVA");

book.put("pages", 100);

books.insert(book);

book = new BasicDBObject();

book.put("name", "Understanding JSON");

book.put("pages", 200);

books.insert(book);

book = new BasicDBObject();

book.put("name", "Understanding XML");

book.put("pages", 300);

books.insert(book);

book = new BasicDBObject();

book.put("name", "Understanding Web Services");

book.put("pages", 400);

books.insert(book);

book = new BasicDBObject();

book.put("name", "Understanding Axis2");

book.put("pages", 150);

books.insert(book);

String map = "function() { "+

"var category; " +

"if ( this.pages >= 250 ) "+

"category = 'Big Books'; " +

"else " +

"category = 'Small Books'; "+

"emit(category, {name: this.name});}";

String reduce = "function(key, values) { " +

"var sum = 0; " +

"values.forEach(function(doc) { " +

"sum += 1; "+

"}); " +

"return {books: sum};} ";

MapReduceCommand cmd = new MapReduceCommand(books, map, reduce,

null, MapReduceCommand.OutputType.INLINE, null);

MapReduceOutput out = books.mapReduce(cmd);

for (DBObject o : out.results()) {

System.out.println(o.toString());

}

} catch (Exception e) {

e.printStackTrace();

}

}

public void GroupByManyField() throws UnknownHostException{

//此方法没有执行成功

Mongo mongo = new Mongo("localhost", 27017);

DB db = mongo.getDB("libary");

DBCollection books = db.getCollection("books");

BasicDBObject groupKeys = new BasicDBObject();

groupKeys.put("total", new BasicDBObject("$sum","pages"));

BasicDBObject condition = new BasicDBObject();

condition.append("pages", new BasicDBObject().put("$gt", 0));

String reduce = "function(key, values) { " +

"var sum = 0; " +

"values.forEach(function(doc) { " +

"sum += 1; "+

"}); " +

"return {books: sum};} ";

/**

BasicDBList basicDBList = (BasicDBList)db.getCollection("mongodb中集合编码或者编码")

.group(DBObject key, --分组字段,即group by的字段

DBObject cond, --查询中where条件

DBObject initial, --初始化各字段的值

String reduce, --每一个分组都须要执行的Function

String finial --终结Funciton对结果进行终于的处理

*/

DBObject obj = books.group(groupKeys, condition, new BasicDBObject(), reduce);

System.out.println(obj);

AggregationOutput ouput = books.aggregate(new BasicDBObject("$group",groupKeys));

System.out.println(ouput.getCommandResult());

System.out.println(books.find(new BasicDBObject("$group",groupKeys)));

}

/**

* 分页查询

*/

public void pageQuery() {

DBCursor cursor = MongoInit.getColl("wujintao").find().skip(0)

.limit(10);

while (cursor.hasNext()) {

System.out.println(cursor.next());

}

}

/**

* 模糊查询

*/

public void likeQuery() {

Pattern john = Pattern.compile("joh?n");

BasicDBObject query = new BasicDBObject("name", john);

// finds all people with "name" matching /joh?n/i

DBCursor cursor = MongoInit.getColl("wujintao").find(query);

}

/**

* 条件删除

*/

public void delete(String dbCollection,String dataID) {

BasicDBObject query = new BasicDBObject();

query.put("id", dataID);

// 找到而且删除,并返回删除的对象

DBObject removeObj = MongoInit.getColl(dbCollection).findAndRemove(query);

System.out.println(removeObj);

}

/**

* 更新

*/

public void update() {

BasicDBObject query = new BasicDBObject();

query.put("name", "liu");

DBObject stuFound = MongoInit.getColl("wujintao").findOne(query);

stuFound.put("name", stuFound.get("name") + "update_1");

MongoInit.getColl("wujintao").update(query, stuFound);

}

public void testGpsData() {

try {

//13862082455:117.13172:029.77659:131.2580

Date d = new Date();

SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");

String dateNowStr = sdf.format(d);

System.out.println(dateNowStr);

DBCollection coll = MongoInit.getColl("table_admin");

BasicDBObject doc = new BasicDBObject();

doc.put("id", "12345678");

doc.put("time", dateNowStr);

doc.put("data", "117.13172:029.77659:131.2580");

doc.put("status", "0");

coll.insert(doc);

// 设定write concern,以便操作失败时得到提示

coll.setWriteConcern(WriteConcern.SAFE);

BasicDBObject dsort = new BasicDBObject();

dsort.put("time", -1);

BasicDBObject searchDevice = new BasicDBObject();

searchDevice.put("id", "12345678");

DBCursor cursor = coll.find(searchDevice).sort(dsort);

List list = cursor.toArray();

//ArrayList listSensorData=new ArrayList(list.size());

ObjectMapper mapper = new ObjectMapper();

String jsonfromList = null;

try {

//list转json

jsonfromList = mapper.writeValueAsString(list);

} catch (JsonProcessingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

//System.out.println(jsonfromList);

//for(int i=0;i

//{

//System.out.println((String) list.get(i).get("time"));

//}

//System.out.println(list.size()+","+listSensorData);//list的长度

// System.out.println(cursor.count());//计算结果的数量,相似于(mysql count()函数),不受limit的影响

//while (cursor.hasNext()) {

//System.out.println(cursor.next());

//}

System.out.println("The Search Query has Executed!");

} catch (MongoException e) {

e.printStackTrace();

}

}

public static void main(String[] args) {

String dbname="wlwdb";

String dbCollection="table_admin";

String dbCollection1="15257102317";

String dataID="12345678";

MongoUtils tb=new MongoUtils();

tb.testGetDBS();//查询全部数据库

tb.getAllCollections();//查询全部表

//

//tb.findOne(dbCollection);//查找第一条记录

tb.testGpsData();

tb.getAllDocuments(dbCollection);//获取制定表明的全部数据

//tb.dropDatabase(dbname);//删除指定数据库

//tb.delete(dbCollection,dataID);//删除制定表明和设备ID的数据

//tb.dropCollection(dbCollection);// 删除一个表

//tb.createIndex(dbCollection1);//创建索引

//tb.getIndexInfo(dbCollection1);//获得表中全部索引

}

}

MongoDBConfig.properties

#端口设置

DBPort=27017

#URL

DBUrl=localhost

#URL

DBName=wlwdb

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值