java操作mongoDB
mongoDB作爲一個牛氣哄哄的nosql內存數據庫,的確有很多優點,對於大數據量、高併發、弱事務的互聯網應用,MongoDB可以應對自如。接觸到mongoDB 參考了下api實現了增刪改查、mongoDB 是面向對象設計,不用寫sql語句 直接操作api 方法 就可以實現,這會兒數據庫語句寫不好的娃娃們有福了。直接貼碼:
DataTest.java
package com.zk.db;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
import org.bson.types.ObjectId;
import org.junit.Test;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.Mongo;
import com.mongodb.MongoException;
/**
* 測試mongodb curd
* @author zk
* @time 2015年4月24日23:19:15
*/
public class DataTest {
// 1.建立一個Mongo的數據庫連接對象
static Mongo connection = null;
// 2.創建相關數據庫的連接
static DB db = null;
static {
try {
connection = new Mongo("127.0.0.1:27017"); //默認鏈接地址
} catch (Exception e) {
e.printStackTrace();
}
db = connection.getDB("one");//獲取數據庫名稱
}
/**
* 測試創建數據文檔集合 類似 數據表 person
* @throws UnknownHostException
* @throws MongoException
*/
@Test
public void test1() throws UnknownHostException, MongoException {
// 實例化
MongoDb mongoDb = new MongoDb("one");
mongoDb.createCollection("person");
}
/**
* 測試添加一條記錄
*
* @throws UnknownHostException
* @throws MongoException
*/
@Test
public void test2() throws UnknownHostException, MongoException {
// 實例化
DBObject p1 = new BasicDBObject();
p1.put("name", "zk00");
insert(p1, "person");
}
/**
* 測試添加一條記錄
*
* @throws UnknownHostException
* @throws MongoException
*/
@Test
public void test3() throws UnknownHostException, MongoException {
List<DBObject> dbObjects = new ArrayList<DBObject>();
DBObject zs = new BasicDBObject("name", "zhaosi");
DBObject zq = new BasicDBObject("name", "zhuqi");
dbObjects.add(zs);
dbObjects.add(zq);
insertBatch(dbObjects, "person");
}
/**
* 測試 根據id 刪除一條記錄
*
* @throws UnknownHostException
* @throws MongoException
*/
@Test
public void test4() throws UnknownHostException, MongoException {
deleteById("553a5accb9d133bcf4056a40", "person");
}
/**
* 測試 根據條件 刪除
*
* @throws UnknownHostException
* @throws MongoException
*/
@Test
public void test5() throws UnknownHostException, MongoException {
DBObject obj = new BasicDBObject();
obj.put("name", "zk00");
int count = deleteByDbs(obj, "person");
System.out.println("刪除數據的條數是: " + count);
}
/**
* 測試 更新操作
*
* @throws UnknownHostException
* @throws MongoException
*/
@Test
public void test6() throws UnknownHostException, MongoException {
DBObject obj = new BasicDBObject();
obj.put("name", "zhaosi");
DBObject update = new BasicDBObject();
update.put("$set", new BasicDBObject("name", "nn1"));
update(obj, update, false, true, "person");
}
/**
* 測試 查詢出person集合中的name
*
* @throws UnknownHostException
* @throws MongoException
*/
@Test
public void test7() throws UnknownHostException, MongoException {
DBObject keys = new BasicDBObject();
keys.put("_id", false);
keys.put("name", true);
DBCursor cursor = find(null, keys, "person");
while (cursor.hasNext()) {
DBObject object = cursor.next();
System.out.println(object.get("name"));
}
}
/**
* 測試 分頁
*
* @throws UnknownHostException
* @throws MongoException
*/
@Test
public void test8() throws UnknownHostException, MongoException {
DBCursor cursor = find(null, null, 0, 6, "person");
while (cursor.hasNext()) {
DBObject object = cursor.next();
System.out.print("name=" + object.get("name") + " ");
System.out.println("_id=" + object.get("_id"));
}
}
/**
* 創建一個數據庫集合
*
* @param collName
* 集合名稱
* @param db
* 數據庫實例
*/
public void createCollection(String collName) {
DBObject dbs = new BasicDBObject();
db.createCollection("person", dbs);
}
/**
* 爲相應的集合添加數據
*
* @param dbs
* @param collName
*/
public void insert(DBObject dbs, String collName) {
// 1.得到集合
DBCollection coll = db.getCollection(collName);
// 2.插入操作
coll.insert(dbs);
}
/**
* 爲集合批量插入數據
*
* @param dbses
* @param collName
*/
public void insertBatch(List<DBObject> dbses, String collName) {
DBCollection coll = db.getCollection(collName);
coll.insert(dbses);
}
/**
* 根據id刪除數據
*
* @param id
* @param collName
* @return 返回影響的數據條數
*/
public int deleteById(String id, String collName) {
DBCollection coll = db.getCollection(collName);
DBObject dbs = new BasicDBObject("_id", new ObjectId(id));
int count = coll.remove(dbs).getN();
return count;
}
/**
* 根據條件刪除數據
*
* @param id
* @param collName
* @return 返回影響的數據條數
*/
public int deleteByDbs(DBObject dbs, String collName) {
DBCollection coll = db.getCollection(collName);
int count = coll.remove(dbs).getN();
return count;
}
/**
* 更新數據
*
* @param find
* 查詢器
* @param update
* 更新器
* @param upsert
* 更新或插入
* @param multi
* 是否批量更新
* @param collName
* 集合名稱
* @return 返回影響的數據條數
*/
public int update(DBObject find, DBObject update, boolean upsert,
boolean multi, String collName) {
DBCollection coll = db.getCollection(collName);
int count = coll.update(find, update, upsert, multi).getN();
return count;
}
/**
* 查詢(分頁)
* @param ref
* @param keys
* @param start
* @param limit
* @return
*/
public DBCursor find(DBObject ref, DBObject keys, int start, int limit,
String collName) {
DBCursor cur = find(ref, keys, collName);
return cur.limit(limit).skip(start);
}
/**
* 查詢 (不分頁)
* @param ref
* @param keys
* @param start
* @param limit
* @param collName
* @return
*/
public DBCursor find(DBObject ref, DBObject keys, String collName) {
DBCollection coll = db.getCollection(collName);
DBCursor cur = coll.find(ref, keys);
return cur;
}
}
注意:connection.close();最後別忘記調用,另外 做過java的同學都知道連接池 以及釋放回收鏈接問題。mongodb自動內部實現了連接池。不需要再考慮該問題,也可以自行實現設置。