说起Java操作数据库自然会想到Sun的知名品牌JDBC,对于MongoDB这样的NoSQL数据库,暂时没有像JDBC这样的标准。这篇文章中对目前的形势做了分析和憧憬http://www.
说起java操作数据库自然会想到sun的知名品牌jdbc,,对于mongodb这样的nosql数据库,暂时没有像jdbc这样的标准。
这篇文章中对目前的形势做了分析和憧憬
立即学习“Java免费学习笔记(深入)”;
回到正题记录下熟悉MongoDB为Java语言提供的操作接口mongo-java-driver.jar
立即学习“Java免费学习笔记(深入)”;
1.基本的根基不变,连接数据库
2.基本的数据库操作不变,CRUD
3.变化的是提供的接口,实现类名,操作对象大不相同
4.变化的是没有标准的Java操作MongoDB的标准API
立即学习“Java免费学习笔记(深入)”;
MongoDB提供的Java操作API可以说是对Mongo数据库命令的Java翻译,熟悉Mongo命令,熟悉Java操作数据库的基本思路,很容易掌握基本操作。
立即学习“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;}}
立即学习“Java免费学习笔记(深入)”;
数据库链接少不了的主机名,端口号,数据库名称。上面代码中的Mongo对象就相当与Connection对象。
立即学习“Java免费学习笔记(深入)”;
数据库的操作
下面的每个方法代表一个方面的测试
测试类初始化方法:
private static BaseDao dao;@BeforeClasspublic static void start() {dao = new BaseDao(“users”,”uf”);}
关于BaseDao是对Mongo操作数据库的基本常用的方法做了封装的一个DAO对象,代码会在本文末尾附上。
立即学习“Java免费学习笔记(深入)”;
插入:
立即学习“Java免费学习笔记(深入)”;
// 添加一条记录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);}
立即学习“Java免费学习笔记(深入)”;
// 添加多条记录public void test2() {int actual = 0;int size = 0;for (int i = 2; i
立即学习“Java免费学习笔记(深入)”;
立即学习“Java免费学习笔记(深入)”;
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());}
立即学习“Java免费学习笔记(深入)”;
Mongo删除比较容易,指定一个BasicDBObject作为匹配条件,将删除匹配的所有记录(文档对象)。
多条件查询