本周实验性地使用上mongodb,应用场景很简单,所以现在对mongodb了解也不是很深入。本文主要介绍mongodb的java客户端编程,这方面的内容也很简单,这里只是做个总结。不得不说,像mongodb这种介于kv和sql之间的存储,对很多的互联网应用很合适。mongodb现在的应用案例已经很多,并且社区的活跃度很高(国内也有不少人对其有很深的研究,如果有时间和精力,或许我也会投入一些对mongodb的研究),很值得期待。
言归正传,下面总结下使用Java开发mongodb应用的一些点滴。在Java中和mongodb交互的最直接的选择就是使用MongoDB Java Driver,其下载地址是:http://github.com/mongodb/mongo-java-driver/downloads。总的来说,在Java中操作mongodb的API还是很简洁,下面对其一些常见的使用做些介绍。
1、连接数据库
和mongodb建立连接的示例代码如下:
Mongo m = new Mongo("localhost",27017);
DB db = m.getDB("db_test");
尽管这里获得了表示mongodb的db_test数据库连接的对象db,但这时并没有真正和mongodb建立连接,所以即便这时数据库没起来也不会抛出异常,尽管你还是需要catch它的实例化过程。mongodb的java driver对连接做了池化处理,所以应用中只需要实例化一个Mongo对象即可,对它的操作是线程安全的,这对开发使用来说真的是很方便。
2、取得DBCollection
mongodb中的collection在Java中使用DBCollection表示(这是一个抽象类,尽管你不必需要知道),创建DBCollection实例也是一行代码,和创建DB实例一样,这个操作并不涉及真正的和数据库之间的通信。
DBCollection coll = db.getCollection("collection1");
要获得类似mysql中“show tables”功能,可以使用如下代码:
Set<String> colls = db.getCollectionNames();
for (String s : colls) {
System.out.println(s);
}
3、插入文档
mongodb存储JSON格式的文档,而在Java中表示这种数据格式的最简便的类就是Map了。MongoDB Java Driver中提供的BasicDBObject就是个Map(它继承自LinkedHashMap并实现DBObject接口),它会将Map中的数据转换成BSON格式传输到mongodb。下面是插入文档的示例:
DBCollection coll = db.getCollection("collection1");
BasicDBObject doc = new BasicDBObject();
doc.put("name", "kafka0102");
doc.put("age", 28);
doc.put("time", new Date());
coll.insert(doc);
mongodb中每个插入的文档会产生个唯一标识_id。当调用coll.insert(doc);时,driver会检查其中是否有_id字段,如果没有则自动生成ObjectId实例来作为_id的值,这个ObjectId由4部分编码而成:当前时间、机器标识、进程号和自增的整数。
insert函数也支持插入文档列表:
insert(List<DBObject> list)
而提交操作也有update( DBObject q , DBObject o )、remove( DBObject o )。
4、查询文档
4.1、findOne
findOne是查询满足条件的第一条记录(不意味着数据库满足条件的只有一条记录),查询条件使用DBObject表示,示例如下:
DBCollection coll = db.getCollection("collection1");
BasicDBObject cond = new BasicDBObject();
cond.put("name", "kafka0102");
cond.put("age", 28);
DBObject ret = coll.findOne(cond);
System.out.println(ret);
返回结果是个DBObject,可以通过get(key)来取值。对于查询条件,可以通过嵌套多层来表示复杂的格式,比如:
query = new BasicDBObject();
query.put("i", new BasicDBObject("$gt", 50)); // e.g. find all where i > 50
4.2、find
find函数是查询集合的,它返回的DBCursor是DBObject的迭代器,使用示例如下:
DBCollection coll = db.getCollection("collection1");
BasicDBObject cond = new BasicDBObject();
cond.put("i", new BasicDBObject("$gt", 20).append("$lte", 30));
DBCursor ret = coll.find(cond);
while(ret.hasNext()) {
System.out.println(ret.next());
}
5、使用索引
创建索引语句如:coll.createIndex(new BasicDBObject(“i”, 1)); ,其中i表示要索引的字段,1表示升序(-1表示降序)。可以看到,DBObject成为java客户端通用的结构表示。查看索引使用DBCollection.getIndexInfo()函数。
6、MongoDB Java Driver的并发性
前面提到,Java MongoDB Driver使用了连接的池化处理,这个连接池默认是保持10个连接,可以通过Option进行修改,在应用中使用Mongo的一个实例即可。连接池中的每个连接使用DBPort结构表示(而不是DBCollection),并寄存于DBPortPool中,所以对DBCollection的操作并不意味着使用同一个连接。如果在应用的一次请求过程中,需要保证使用同一个连接,可以使用下面的代码片断:
DB db...;
db.requestStart();
//code....
db.requestDone();
在requestStart和requestDone之间使用的连接就不是来自于DBPortPool,而是当前线程中的ThreadLocal结构变量(MyPort中保持了DBPort成员)。
7、其他选择
尽管Java mongodb driver很不错,但就像很多人不使用JDBC而使用一些ORM框架,mongodb的java客户端也有其他的选择。
1)对POJO和DAO的支持。对于那些热衷ORM的人来说,Morphia(http://code.google.com/p/morphia/wiki/QuickStart)是个不错的选择,它通过在POJO中添加注释来实现映射,并提供对DAO的CRUD操作的支持。
2)对DSL的支持。Sculptor就是这样的东西,使用者编写中立的DSL文件,Sculptor将其翻译成代码。这通常不具有吸引力,除非是多语言的应用,能将DSL翻译成多种编程语言,否则除了增加学习成本,没什么收益。
3)对JDBC的支持。mongo-jdbc是这样的东西,但现在还是实验性质的。它或许是想亲近Java程序员,不过它显然不能完全兼容JDBC,而很多Java程序员对JDBC也并不感冒,所以它不是很值得使用。
分享到:
相关推荐
Java 中 MongoDB 使用环境详细配置是指在 Windows 平台(WinXP)上安装、运行、安装 Windows 服务的笔记,以作备忘。下面是一些重要的知识点: 1. MongoDB 的下载和安装 MongoDB 提供了多种操作系统的版本,包括 ...
在本文中,我们将深入探讨如何使用Java连接MongoDB,涉及的知识点包括MongoDB Java驱动程序的安装、配置,以及基本的连接和操作数据库的方法。 首先,我们来看“java连接mongodb的jar包”。这个“mongodbjar”通常...
在这个Java操作MongoDB中存储的文件实例中,我们将探讨如何利用GridFS API进行文件的存取。 首先,我们需要在Java项目中引入MongoDB的驱动库。目前,Java驱动通常使用的是MongoDB Java Driver,可以在Maven仓库中...
在Java开发中,与MongoDB的交互通常涉及使用连接池来优化性能和资源管理。MongoDB连接池是解决数据库连接管理和复用的一种机制,旨在提高应用的并发能力,减少创建和销毁连接的开销,同时确保在高并发场景下的稳定性...
本教程将引导你逐步了解MongoDB的基础知识,深入其架构,并展示如何在Java环境中使用MongoDB。 首先,我们从"MongoDB入门教程"开始。MongoDB采用的是键值对存储方式,数据以JSON格式(BSON)存储,这使得数据的读写...
在Java中使用MongoDB,首先需要安装并配置对应的驱动版本,以确保与正在运行的MongoDB服务器兼容。 1. MongoDB驱动介绍: MongoDB提供了多种语言的驱动程序,Java驱动是其中之一。它基于Java 6及更高版本,实现了...
**查询**:在MongoDB中,查询操作通常是通过`find()`方法实现的。例如,查询所有文档: ```java FindIterable<Document> iterable = collection.find(); for (Document doc : iterable) { System.out.println(doc....
在这个“MongoDB之Java使用例子”中,我们将深入探讨如何在Java环境中操作MongoDB数据库,包括增、删、改、查(CRUD)操作以及图像数据的存储和检索。 首先,Java与MongoDB的交互主要通过MongoDB的Java驱动程序实现...
在Java中使用MongoDB,我们可以借助Spring Data MongoDB框架,它提供了一种简化的方式来操作MongoDB数据库。 首先,让我们了解Spring Data MongoDB的核心概念。Spring Data MongoDB为MongoDB提供了数据访问抽象层,...
然后,我们创建了一个文件对象,并将其存储到MongoDB中: ```java GridFSInputFile gridFSInputFile = fs.createFile(new File("D://test.png")); gridFSInputFile.setFilename("db_test.png"); gridFSInputFile....
1. **定时任务**:使用Java的ScheduledExecutorService或Quartz等库,定期轮询两个数据库,检查是否有新的增删改查操作,如果有,则在另一数据库中执行相应的操作。 2. **监听事件**:MySQL支持触发器和binlog日志...
这个库提供了对BSON数据类型的编码和解码功能,使得Java应用程序能够理解和处理MongoDB中的文档结构。BSON是一种轻量级的数据交换格式,类似于JSON,但支持更多数据类型,如日期、二进制数据和ObjectId等。 2. `...
在Java编程环境中,MongoDB是一个常用的NoSQL数据库系统,它以JSON格式存储数据,提供了高性能、高可用性和可扩展性。本教程将详细介绍如何使用Java与MongoDB进行交互,包括基本的增删改查(CRUD)操作。首先,我们...
集合在MongoDB中类似于关系数据库中的表,是存储数据的基本单位。创建集合的Java代码可能包括初始化MongoDB客户端,连接到服务器,然后在指定的数据库中创建集合。 数据查询则涉及到MongoDB的查询语言,它允许我们...
在Java编程环境中,MongoDB是一个广泛使用的文档型数据库,它以JSON格式存储数据,提供了高性能、高可用性和可扩展性。本教程将详细介绍如何使用Java进行MongoDB的基本操作,包括增(添加数据)、删(删除数据)、改...
在Java环境中,我们通常使用MongoDB的Java驱动程序来实现这种连接。本文将深入探讨如何使用Java API连接MongoDB,并执行基本的操作。 首先,确保已经在项目中引入了MongoDB的Java驱动程序。如果使用Maven,可以在`...
- 在Java项目中使用MongoDB之前,需要添加MongoDB的Java驱动依赖。可以通过Maven或Gradle来管理依赖。 ```xml <groupId>org.mongodb <artifactId>mongodb-driver <version>3.4.2 ``` 2. **连接MongoDB**...
2. **解压安装**: 在Linux中,使用`tar -zxvf`命令解压下载的安装包,然后重命名解压后的目录,例如`mongodb`。 3. **创建数据和日志目录**: 在`mongodb`目录下,创建`data`存储数据,创建`log`存放日志,并在`log`...
### MongoDB Java API 使用详解 #### 一、Java 驱动简介与一致性 MongoDB 的 Java 驱动是线程安全的,适用于大多数应用程序场景。通常情况下,只需要创建一个 `Mongo` 实例即可,因为它内部包含了一个连接池(默认...