作者:fly-fox | 来源:互联网 | 2018-07-10 10:31
说起Java操作数据库自然会想到Sun的知名品牌JDBC,对于MongoDB这样的NoSQL数据库,暂时没有像JDBC这样的标准。这篇文章中对目前的形势做了分析和憧憬www.
说起Java操作数据库自然会想到Sun的知名品牌JDBC,对于MongoDB这样的NoSQL数据库,暂时没有像JDBC这样的标准。这篇文章中对目前的形势做了分析和憧憬http://www.
说起Java操作数据库自然会想到Sun的知名品牌JDBC,,对于MongoDB这样的NoSQL数据库,暂时没有像JDBC这样的标准。
这篇文章中对目前的形势做了分析和憧憬
回到正题记录下熟悉MongoDB为Java语言提供的操作接口mongo-java-driver.jar
1.基本的根基不变,连接数据库
2.基本的数据库操作不变,CRUD
3.变化的是提供的接口,实现类名,操作对象大不相同
4.变化的是没有标准的Java操作MongoDB的标准API
MongoDB提供的Java操作API可以说是对Mongo数据库命令的Java翻译,熟悉Mongo命令,熟悉Java操作数据库的基本思路,很容易掌握基本操作。
数据库连接
package com.im;
public final class SystemConstant {
public static final class Configure {
public static final String HOST = "127.0.0.1";
public static final int PORT = 27017;
public static final String USERNAME = "";
public static final String PASSWORD = "";
public static final String DATABASE = "im";
}
}package com.im;
import java.net.UnknownHostException;
import com.mongodb.Mongo;
import com.mongodb.MongoException;
public class MongoFactory {
private static MongoFactory mongoFactory;
private MongoFactory() {
}
public static MongoFactory getInstance() {
if (mOngoFactory== null) {
mOngoFactory= new MongoFactory();
}
return mongoFactory;
}
public Mongo getMongo() {
Mongo mOngo= null;
try {
mOngo= new Mongo(SystemConstant.Configure.HOST,
SystemConstant.Configure.PORT);
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (MongoException e) {
e.printStackTrace();
}
return mongo;
}
}
数据库链接少不了的主机名,端口号,数据库名称。上面代码中的Mongo对象就相当与Connection对象。
数据库的操作
下面的每个方法代表一个方面的测试
测试类初始化方法:
private static BaseDao dao;
@BeforeClass
public static void start() {
dao = new BaseDao("users","uf");
} 关于BaseDao是对Mongo操作数据库的基本常用的方法做了封装的一个DAO对象,代码会在本文末尾附上。
插入:
// 添加一条记录
public void test1() {
BasicDBObject jo = new BasicDBObject();
jo.put("_id", "00001");
jo.put("name", "Tomcat");
jo.put("age", 22);
jo.put("interest", new String[] { "swimming", "Taiji", "football" });
int actual = dao.insert(jo);
System.out.println(actual);
Assert.assertEquals(1, actual);
}
// 添加多条记录
public void test2() {
int actual = 0;
int size = 0;
for (int i = 2; i <11; i++) {
BasicDBObject jo = new BasicDBObject();
jo.put("_id", "0000" + i);
jo.put("name", "Tomcat_" + i);
jo.put("age", i * 2);
jo.put("interest", new String[] { "swimming", "Taiji" });
actual += dao.insert(jo);
size++;
}
Assert.assertEquals(size, actual);
}
BasicDBObject对象是Mongo的BSONObject的基本实现类,而BSONObject对象正是Key-Value的形式的Map保存到数据库中。
基本的查询(主键查询,查询集合,条件查询)
// 查询指定编号的记录
public void test3() {
BasicDBObject query = new BasicDBObject();
query.put("_id", "00001");
List
dboList = dao.query(query);
System.out.println(dboList.get(0).toString());
Assert.assertEquals(1, dboList.size());
}
// 模糊查询,统计记录结果数量
public void test4() {
BasicDBObject query = new BasicDBObject();
query.put("interest", new String[] { "swimming", "Taiji" });
long count = dao.getCount(query);
Assert.assertEquals(9, count);
}
// 模块查询,查询结果集合
public void test5() {
BasicDBObject query = new BasicDBObject();
query.put("interest", new String[] { "swimming", "Taiji" });
List dboList = dao.query(query);
for (DBObject jo : dboList) {
System.out.println(jo.toString());
}
Assert.assertEquals(9, dboList.size());
} 下面是插入数据后的数据库的数据情况,图中数据是各种测试后的数据,不完全对于每个方法的操作后数据库情况。
更新操作
Mongo更新操作要准备两个BasicDBObject对象,一个是要更新的对象,另一个是更新后的对象。
// 更新指定记录的信息
public void test6() {
BasicDBObject query = new BasicDBObject();
query.put("_id", "00001");
BasicDBObject jo = new BasicDBObject();
jo.put("_id", "00001");
jo.put("name", "Jackson");
jo.put("interest", new String[] { "Song", "Taiji", "Running" });
jo.put("firends",
new BasicDBObject[] {
(BasicDBObject) dao.query(
new BasicDBObject("_id", "00002")).get(0),
(BasicDBObject) dao.query(
new BasicDBObject("_id", "00002")).get(0) });
int actual = dao.update(query, jo);
Assert.assertEquals(1, actual);
}删除操作
// 删除指定记录
public void test7() {
BasicDBObject query = new BasicDBObject();
query.put("_id", "000010");
dao.delete(query);
List dboList = dao.query(query);
Assert.assertEquals(0, dboList.size());
}
Mongo删除比较容易,指定一个BasicDBObject作为匹配条件,将删除匹配的所有记录(文档对象)。
多条件查询