- 浏览: 157273 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
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 2773这些天捣鼓了一下mongodb的replica set 本人初 ... -
Redis配置
2011-08-01 16:48 1334转自:http://yjc2020.iteye.com/blo ... -
mongodb启动脚本
2011-06-08 14:36 3892#!/bin/sh # chkconfig: 2345 ... -
MongoDB设置访问权限、设置用户(转)
2011-04-27 16:09 890原文地址:http://www.cnblogs.com/zen ... -
Spring和Morphia,MongoDB的简单封装以及自增ID的实现(转)
2011-04-27 11:34 2236原文地址:http://www.oschina.net/cod ... -
mongodb 基本操作(转)
2011-04-26 16:38 1713原文:http://blog.csdn.net/interfa ... -
mongodb java api(转)
2011-04-22 17:52 1412原文地址:http://keben1983.blog.163. ... -
基于MongoDB MapReduce的统计分析(转)
2011-04-22 17:23 1915原文地址:http://www.oecp.cn/hi/yong ... -
Linux下安装MongoDB(转)
2011-04-22 14:22 783原文地址:http://os.51cto.com/art/20 ... -
MongoDB介绍及安装(转)
2011-04-22 14:21 454原文地址:http://database. ... -
java连接数据库(JDBC)
2011-02-24 09:42 826public class DBConnection { ... -
SQL 连接 JOIN 例解。(转)
2010-07-26 08:10 708假设有如下表: 一个 ... -
SQL语句使用大全(转)
2010-07-26 08:06 1504----------------------------- ... -
解决oracle自增长字段的方案
2010-07-22 10:50 1190方案一: 使用oracle自己的序列 方案二: 创建一个ins ...
相关推荐
spring mvc 集成mongoDB项目 例子
一个例子,很容易上手的学习代码,有助于对mongodb的了解
spring,SpringMVC,整合MongoDB的例子,基于spring-data-mongo1.X,spring4.X
springdata+springmvc+ mongodb很好的例子
spring-boot操作mongodb例子,亲测可以用,代码整理的比较好
简单的mongodb的使用例子,适合mongodb的入门,和框架搭建
MongoDB之Java使用例子,详细的增删改查例子,以及图片保存删除查询等~
C# 连接mongodb的例子,有封装好的类。
.net core mongodb例子
Spring-Mongodb开发例子,对于初学者有一定的参考意义。
非常简单的一个demo,适合初学者,欢迎下载
公司里要用mongodb数据库存放文件,给我一个星期的时间让我研究,这是我用mongodb数据库+struts写的小例子,能够实现人员的注册,头像的上传,帖子的管理。功能简单,主要让大家看看mongodb数据库的具体使用。文档写...
MongoDB C/C++开发使用案例Demo(含源代码例子、编译好的MongoDB C库文件(.h .lib .dll)、开发环境搭建配置文档等),可直接用于项目开发
例子简单的实现了spring结合mongo的例子 spring:4.1.2 spring-data-mongodb:1.1.0 java:1.8 log4j:1.2.16 junit:4.12 commons-logging:1.1.1 maven:3 注意:spring的不同版本与mongodb结合可能会有问题,自测:...
这个主要是spark 用JAVA语言连接mysql , mongodb 数据库的 CRUD 例子;附件有运行使用的截图,运行入口在Test目录的测试用例;仅供参考!
mongodb java 调用例子附代码和解释
MongoDB + MVC 实现上传的例子
Mongodb java 例子
群里学习lucene的成员挺多的,一直没时间给大家做个demo、最近抽时间用lucene给大家写了个demo 可以配置采集网站的图片,包含分组统计,相同数据合并功能,主要是给群内成员来个demo 小试牛刀、临时写的,莫吐槽 ...
Mongodb 数据库 JAVA 增删改查操作例子