- 浏览: 160486 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
youjianbo_han_87:
jredis有连接池啊
Jedis操作redis -
zhouzq1008:
就是,为什么只有4.0
eclipse 安装 resin 3 步骤 (转) -
lalaeye:
是的,如果不释放资源的话,如果操作连接频繁的话,或导致打开太多 ...
Jedis操作redis -
hugh.wang:
还好,注意释放一下资源~~
Jedis操作redis -
nihao7010:
先赞一下再仔细阅读
Jedis操作redis
原文地址:http://lanmh.iteye.com/blog/765844
对mongodb进行java编程 转自
http://www.kafka0102.com/2010/07/209.html
本周实验性地使用上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也并不感冒,所以它不是很值得使用。
8、参考资料
1、http://www.mongodb.org/display/DOCS/Java+Tutorial
2、http://api.mongodb.org/java/2.0/index.html
=============================== 华丽的终止符 ================================
本文作者:kafka0102,转载文章请注明来源,谢谢!!
本文链接:http://www.kafka0102.com/2010/07/209.html
import java.net.UnknownHostException; import java.util.Set; 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; public class Test { /** * @author gaogao * @param args * @throws MongoException * @throws UnknownHostException */ public static void main(String[] args) throws UnknownHostException, MongoException { // TODO Auto-generated method stub // 连接本地数据库 Mongo m = new Mongo(); // 创建名为new_test_db的数据库 DB db = m.getDB("new_test_db"); // 获取new_test_db中的集合(类似于获取关系数据库中的表) Set<String> cols = db.getCollectionNames(); // 打印出new_test_db中的集合,这里应当为null for (String s : cols) { System.out.println(s); } // 创建一个叫做"new_test_col"的集合 DBCollection collection = db.getCollection("new_test_col"); // 初始化一个基本DB对象,最终插入数据库的就是这个DB对象 BasicDBObject obj = new BasicDBObject(); // 放入几个键值对 obj.put("from", "搞搞"); obj.put("to", "宝宝"); obj.put("subject", "狗子爱宝子"); //插入对象 collection.insert(obj); //查看一条记录,findOne()=find().limit(1); DBObject dbobj=collection.findOne(); //打印出刚才插入的数据 System.out.println(dbobj); //现在我们来插入9条{ranking:i}的数据 for(int i=0;i<9;i++){ collection.insert(new BasicDBObject().append("ranking", i)); } //打印集合中的数据总数,这里应当输出10 System.out.println(collection.getCount()); //下面我们来遍历集合,find()方法返回的是一个游标(cursor),这里的概念和关系数据库很相似 DBCursor cursor=collection.find(); //然后我们使用这个游标来遍历集合 while(cursor.hasNext()){ System.out.println(cursor.next()); } //下面来看一些略复杂一点的查询技巧,第一个,简单的条件查询,查询ranking为1的记录 BasicDBObject query=new BasicDBObject(); query.put("ranking", 1); cursor=collection.find(query); while(cursor.hasNext()){ System.out.println(cursor.next()); } //下面是更复杂的条件查询,查询ranking大于5小于9的记录 query=new BasicDBObject(); query.put("ranking", new BasicDBObject("$gt", 5).append("$lt", 9)); cursor=collection.find(query); while(cursor.hasNext()){ System.out.println(cursor.next()); } //最后删除我们的测试数据库 m.dropDatabase("new_test_db"); } }
对mongodb进行java编程 转自
http://www.kafka0102.com/2010/07/209.html
本周实验性地使用上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也并不感冒,所以它不是很值得使用。
8、参考资料
1、http://www.mongodb.org/display/DOCS/Java+Tutorial
2、http://api.mongodb.org/java/2.0/index.html
=============================== 华丽的终止符 ================================
本文作者:kafka0102,转载文章请注明来源,谢谢!!
本文链接:http://www.kafka0102.com/2010/07/209.html
发表评论
-
Mongodb的带用户验证replica set配置
2011-10-18 17:14 2812这些天捣鼓了一下mongodb的replica set 本人初 ... -
Redis配置
2011-08-01 16:48 1373转自:http://yjc2020.iteye.com/blo ... -
mongodb启动脚本
2011-06-08 14:36 3919#!/bin/sh # chkconfig: 2345 ... -
MongoDB设置访问权限、设置用户(转)
2011-04-27 16:09 921原文地址:http://www.cnblogs.com/zen ... -
Spring和Morphia,MongoDB的简单封装以及自增ID的实现(转)
2011-04-27 11:34 2260原文地址:http://www.oschina.net/cod ... -
mongodb 基本操作(转)
2011-04-26 16:38 1744原文:http://blog.csdn.net/interfa ... -
mongodb java api(转)
2011-04-22 17:52 1431原文地址:http://keben1983.blog.163. ... -
基于MongoDB MapReduce的统计分析(转)
2011-04-22 17:23 1937原文地址:http://www.oecp.cn/hi/yong ... -
Linux下安装MongoDB(转)
2011-04-22 14:22 802原文地址:http://os.51cto.com/art/20 ... -
MongoDB介绍及安装(转)
2011-04-22 14:21 477原文地址:http://database. ... -
java连接数据库(JDBC)
2011-02-24 09:42 855public class DBConnection { ... -
SQL 连接 JOIN 例解。(转)
2010-07-26 08:10 731假设有如下表: 一个 ... -
SQL语句使用大全(转)
2010-07-26 08:06 1536----------------------------- ... -
解决oracle自增长字段的方案
2010-07-22 10:50 1209方案一: 使用oracle自己的序列 方案二: 创建一个ins ...
相关推荐
在"mongodb的小例子"中,我们可以预期这个压缩包包含了一些简单的示例代码,帮助初学者快速入门MongoDB。这些代码可能涵盖了以下关键知识点: 1. **安装与启动**:首先,你需要在本地或服务器上安装MongoDB。安装...
在这个“mongodb例子”中,我们很可能会找到一个简单的MongoDB数据库操作示例,这对于初学者来说是极好的学习资源。 MongoDB使用JSON格式的文档来存储数据,这种格式灵活且易于理解。数据库、集合和文档是MongoDB中...
Spring Data MongoDB是Spring框架的一个子项目,它使得与MongoDB的交互变得简单和直观。当将Spring Data与Spring MVC结合时,可以构建出强大的Web应用。 **Spring框架** Spring框架是一个开源的Java平台,用于简化...
这个例子展示了如何使用Spring Data MongoDB简化对MongoDB的操作,以及如何在Spring MVC中构建RESTful API。在实际开发中,你可能还需要考虑错误处理、数据验证、分页、排序等复杂功能,但这个基础的例子为你提供了...
Spring Boot 是一个由 Pivotal 团队开发的框架,旨在简化 Spring 应用程序的...通过学习这个例子,开发者可以更好地理解如何在实际项目中利用 Spring Boot 的强大功能来操作非关系型数据库,实现高效的数据存储和检索。
在这个例子中,`Test`目录下的测试用例可以用来验证以上代码的正确性。确保所有操作都能成功执行,并且结果符合预期。运行这些测试用例,可以帮助理解如何在实际项目中结合Spark、MongoDB、Spring和Maven进行数据...
在这个“MongoDB之Java使用例子”中,我们将深入探讨如何在Java环境中操作MongoDB数据库,包括增、删、改、查(CRUD)操作以及图像数据的存储和检索。 首先,Java与MongoDB的交互主要通过MongoDB的Java驱动程序实现...
这个例子中的"spring-springMVC-mongodb整合"是一个很好的学习和实践项目,可以帮助开发者深入理解这些技术的结合使用。通过这样的整合,开发者能够构建出更加灵活、适应现代互联网需求的应用程序。
.net core mongodb例子
在"mongodb的小例子,增删改查,分页"这个主题中,我们将深入探讨MongoDB的基本操作,包括数据的插入(增)、查询(查)、更新(改)以及删除(删),同时还会涉及到数据分页这一重要的数据检索技术。 1. 数据插入...
在"Spring-Mongodb例子"这个压缩包中,可能包含了示例代码,演示了如何在Spring应用中设置MongoDB连接、定义数据模型、创建Repository接口以及执行基本的查询和保存操作。这个例子对于初学者来说,是一个很好的起点...
公司里要用mongodb数据库存放文件,给我一个星期的时间让我研究,这是我用mongodb数据库+struts写的小例子,能够实现人员的注册,头像的上传,帖子的管理。功能简单,主要让大家看看mongodb数据库的具体使用。文档写...
然后,我们创建一个集合(相当于关系数据库中的表),在这个例子中可能是“messages”。集合是存储数据的地方,可以通过`selectCollection()`方法创建或选择: ```php $collection = $db->selectCollection('...
MongoDB是一种流行的开源、分布式文档数据库,常用于构建高性能、可扩展的应用程序。在C#中,我们可以使用MongoDB的官方驱动程序MongoDB.Driver来连接和操作MongoDB数据库。本教程将详细介绍如何使用C#连接到MongoDB...
MongoDB是一种流行的开源...实践中,你可以根据提供的源代码例子进行学习,理解每一步的操作,并尝试自定义功能,进一步熟悉MongoDB的C++ API。在实际项目开发中,这些知识将有助于你构建高效稳定的数据存储解决方案。
在这个“MongoDB+MVC上传例子”中,我们将探讨如何结合这两者来实现文件上传功能。 首先,让我们深入了解MongoDB。MongoDB以其灵活性、高性能和易于扩展性而受到青睐。它支持JSON格式的数据存储,这使得与...
Mongodb java 例子
群里学习lucene的成员挺多的,一直没时间给大家做个demo、最近抽时间用lucene给大家写了个demo 可以配置采集网站的图片,包含分组统计,相同数据合并功能,主要是给群内成员来个demo 小试牛刀、临时写的,莫吐槽 ...
里面是git地址 ,大家可以直接通过git拿来使用。大家也可以根据此来扩展。
MongoDB是一种流行的开源文档型数据库,它以JSON格式存储数据,具有高性能、高可用性和可扩展性。在Java应用程序中,我们通常使用Java驱动程序来与MongoDB进行交互。本篇将详细介绍如何利用Java实现MongoDB数据库的...