`
wjjxf
  • 浏览: 239880 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java使用mongodb存储数据

阅读更多
    Mongodb使用json格式存储数据,不像关系型数据库用记录来表示,它是一种nosql数据库。数据存储用key:value形式存储,这样表示好处就是简单。

    在项目中,有一个用户的实体User,他有很多朋友,当然他的朋友也在数据库里,为了建立关系,如果在关系数据库中我们会建立一个关系表UserFriend来表示这2个关系,这样表示的优点是结构清晰,缺点也显而易见,必须多执行一次查询才能获得好友id列表。。。而且要想更新好友关系那就更复杂了点,需要批量删除修改。。。

    在mongodb里,就可以直接把好友id以数组形式加到用户信息的一个字段里了,这样在获取用户信息时,好友信息就直接获取,大大减少了查询请求,更新时也可以直接设值。这也就是为什么在互联网应用中倾向于使用nosql而不是关系型数据库的原因!简单、高效!

    java的语法似乎不怎么喜欢json格式,通常定义一个对象,用setter和getter来操作数据,比较繁琐,却也不得已而为之!(相对来说,python等脚本语言用json很酷,可以直接用a["key"]来获取和设置字段值)。可惜这个项目已经用java来做了,用python估计不太可能了。

    mongodb提供的java driver里,存取数据用DBObject,它使用类似map操作方法,把字段和值一个个put进去,读取的话可以用get方法,当时第一次接触,我就想到了用反射(reflect)来操作,获取pojo的每个字段值然后put到DBObject里,于是就写了个互相转化的方法,后来在项目中也就是这样使用了,可我写的这个方法只能处理简单类,字段只能为Integer,Long,String这集中类型,不支持数组和map。。做了一段时间,才发现我在用nosql
数据库实现关系数据库,因为我确实用了一个usrfriend集合来存储用户好友关系。。。

    最近才若有所思的发现,我不该这么做,好友id列表应该直接放到用户信息里的。

    在mongodb官网发现有很多第三方工具,其中有个morphia的项目,打开首页(http://code.google.com/p/morphia/),一目了然的看到了如何定义实体以及存储和查找,用了下比我这个方便多了,于是毫不犹豫的开始重构代码。。。

    下面介绍下如何使用morphia

1.下载最新版本的morphia-xxx.jar 并且加入的 path里。

2.在pojo类用注解@Entity定义一个实体,用@Embedded定义一个潜入类。


3.可以直接存储数组,和map。非常方便的可以嵌套很多信息。原先要建关系表的,可以统统取消了。只用一个

查询就可以把所有信息返回了,在高并发时非常实用。

4.morphia提供了一个dao可以拓展或者实例化使用,我没有拓展,因为用了spring,有依赖注入关系,而拓展这

个DAO需要Datastore,在构造函数里无法给它。只有在注入完毕后我才可以给它。于是只有这样了
	public void afterPropertiesSet() throws Exception {
		this.ds = morphia.getDataStore() ;
		dao = new DAO<T, String>(clazz, this.ds); 
	}

5.编写好一些常用接口:

	/**
	 * 增加
	 */
	public void add(T t){
		dao.save(t);
	}
	/**
	 * 创建一个查询
	 */
	protected Query<T> createQuery(){
		return dao.createQuery();
	}
	/**
	 * 根据_id查询
	 */
	protected Query<T> createIdQuery(Object _id){
		return dao.createQuery().field("_id").equal(_id);
	}
	/**
	 * 查找一个实体
	 */
	protected T findOne(Query<T> q){
		return dao.findOne(q);
	}
	
	/**
	 * 根据_id查找
	 */
	public T findById(ObjectId _id){
		return dao.findOne("_id", _id);
	}
	/**
	 * 可查找多个实体
	 */
	protected QueryResults<T> find(Query<T> q){
		return dao.find(q);
	}
	/**
	 * 返回全部实体
	 */
	public List<T> getAll(){
		return this.find(this.createQuery()).asList();
	}
	/**
	 * 分页查找
	 */
	protected QueryResults<T> find(Query<T> q, Page page){
		if(page != null){
			q.limit(page.getPageSize()).offset((page.getPageIndex() - 1) * 

page.getPageSize());
			page.setTotalCount((int) q.countAll());
		}
		return dao.find(q);
	}
	/**
	 * 删除实体
	 */
	protected void delete(T t){
		dao.delete(t);
	} 
	/**
	 * 根据查询删除
	 */
	protected void delete(Query<T> q){
		dao.deleteByQuery(q);
	}
	
	/**
	 * 根据_id删除
	 */
	public void delById(ObjectId id){
		Query<T> q = this.createIdQuery(id);				
		dao.deleteByQuery(q); 
	}
	/**
	 * 更新
	 */
	protected void update(Query<T> q,  UpdateOperations<T> ops){
		dao.update(q, ops);	
	}
	/**
	 * 已知_id进行添加就是更新覆盖
	 */
	public void update(T t){
		dao.save(t);
	}
	/**
	 * 创建一个更新操作
	 */
	protected UpdateOperations<T> createUpdateOperations(){
		return dao.createUpdateOperations();
	}



这样,在具体使用时,直接定义一个User类,它里面的字段可以使用很多其他类,也可以使用数组,然后直接

save,而query时也会一起带出来,很方便,也可以大大较少数据库请求操作。
2
0
分享到:
评论
2 楼 wjjxf 2011-01-07  
xiaoxin5230 写道
请问博主,这个有用到过实际项目中吗?

嗯,正在用
1 楼 xiaoxin5230 2011-01-07  
请问博主,这个有用到过实际项目中吗?

相关推荐

    通过java向mongodb中插入数据

    3. **创建数据和日志目录**: 在`mongodb`目录下,创建`data`存储数据,创建`log`存放日志,并在`log`目录下创建`mongodb.log`。 4. **启动MongoDB服务**: 进入`mongodb/bin`目录,使用`mongod`命令启动MongoDB,...

    java中mongodb使用环境详细配置

    MongoDB 是一个功能强大且灵活的 NoSQL 数据库,Java 开发者可以使用 MongoDB 来存储和管理数据。通过以上的配置和安装步骤,Java 开发者可以轻松地使用 MongoDB。 知识点总结: * MongoDB 的下载和安装 * MongoDB...

    Mongodb + GridFS +Java 操作Mongodb中存储的文件

    在这个Java操作MongoDB中存储的文件实例中,我们将探讨如何利用GridFS API进行文件的存取。 首先,我们需要在Java项目中引入MongoDB的驱动库。目前,Java驱动通常使用的是MongoDB Java Driver,可以在Maven仓库中...

    MongoDB入门教程 + 架构简析 + java使用MongoDB的简单程序

    通过学习上述内容,你将能够熟练地使用MongoDB,并在Java项目中集成MongoDB作为持久化存储。记得参考提供的文档,如"MongoDB设计思想.doc"、"MongoDB教程.pdf"和"mongoDB.txt",这些资源将更详细地阐述MongoDB的各个...

    java 操作mongodb 增删改查

    在Java编程环境中,MongoDB是一个广泛使用的文档型数据库,它以JSON格式存储数据,提供了高性能、高可用性和可扩展性。本教程将详细介绍如何使用Java进行MongoDB的基本操作,包括增(添加数据)、删(删除数据)、改...

    geoserver发布mongodb矢量数据地图服务.docx

    Geoserver是基于Java开发的一款开源GIS服务器,能够处理大量的空间数据,提供了强大的空间数据存储、处理和发布功能。Geoserver支持多种数据源,包括PostGIS、Oracle Spatial、MongoDB等。 二、MongoDB矢量数据存储...

    Java连接mongoDB需要的jar包

    在Java编程环境中,连接MongoDB数据库通常需要特定的驱动程序,这些驱动程序以JAR(Java Archive)文件的形式提供。...正确理解和使用这些库可以让你轻松地在Java项目中集成MongoDB的功能,实现高效的数据存储和检索。

    mongoDB文件存储_java_MongoDB_

    在Java开发中,MongoDB常被用于处理结构化和半结构化的数据。本篇文章将深入探讨MongoDB如何进行文件存储,特别是针对大文件的处理。 首先,MongoDB提供了GridFS(Grid File System)规范,这是一个用于存储和检索...

    java连接Mongodb进行增删改查_java连接Mongodb进行增删改查_curiousjop_depthklb_Mong

    在Java编程中,MongoDB是一个常用的NoSQL数据库,它的灵活性和高性能使得它在处理大量非结构化数据时非常受欢迎。本篇文章将详细讲解如何使用Java连接到MongoDB数据库,并进行基本的增删改查操作。 首先,连接...

    java连接mongodb.zip

    Java连接MongoDB是一个常见的任务,尤其在大数据处理和分布式存储的场景中。MongoDB是一个流行的文档型数据库系统,而Java是开发服务器端应用的常用语言。在这个“java连接mongodb.zip”压缩包中,包含了实现这一...

    java实现mongodb数据库的操作

    在Java开发环境中,我们可以使用Java驱动程序来与MongoDB进行交互,进行数据的存储和检索。本资料将深入讲解如何使用Java实现对MongoDB数据库的操作。 一、MongoDB简介 MongoDB是一个基于分布式文件存储的NoSQL...

    java操作mongoDB(CRUD)

    1. **创建(CREATE)**:在MongoDB中,数据以文档的形式存储在集合中。以下是如何插入一个文档到名为"myCollection"的集合: ```java MongoCollection&lt;Document&gt; collection = database.getCollection(...

    Java操作mongoDB使用文档.docx(16页.docx

    在Java中,你可以使用`DBObject`类来构建要存储的数据结构。创建一个`Map`对象,将数据放入其中,然后将其转换为`DBObject`: ```java Map, String&gt; data = new HashMap(); data.put("key", "value"); DBObject ...

    Java连接mongoDB需要的jar包(3.9.1)

    1. `bson-3.9.1.jar`: BSON(Binary JSON)是MongoDB用于存储和传输数据的一种格式。这个库提供了对BSON数据类型的编码和解码功能,使得Java应用程序能够理解和处理MongoDB中的文档结构。BSON是一种轻量级的数据交换...

    mongodb安装配置及java操作mongodb

    MongoDB是一种流行的开源、分布式文档数据库,用于存储结构化和半结构化数据。它以其灵活性、高性能和易于扩展性而闻名。在这个主题中,我们将深入探讨MongoDB的安装配置以及如何使用Java进行操作。 首先,让我们看...

    JAVA操作MongoDB简单增删改查

    在Java编程环境中,MongoDB是一个常用的NoSQL数据库系统,它以JSON格式存储数据,提供了高性能、高可用性和可扩展性。本教程将详细介绍如何使用Java与MongoDB进行交互,包括基本的增删改查(CRUD)操作。首先,我们...

    java连接mongodb3.4.2所需jar

    3. `bson-3.4.2.jar`:BSON(Binary JSON)是MongoDB内部使用的数据格式,用于在网络中高效地传输和存储数据。这个库提供了对BSON的解析和序列化功能,是Java驱动与MongoDB通信的重要桥梁。 为了在Java项目中使用...

    java 连接mongodb的操作

    MongoDB是一个高性能、开源、无模式的文档型数据库,广泛应用于数据存储和处理。在Java环境中,我们通常使用MongoDB的Java驱动程序来实现这种连接。本文将深入探讨如何使用Java API连接MongoDB,并执行基本的操作。 ...

    使用java上传MP4文件至mongodb数据库,并下载 源代码

    本篇文章将深入讲解如何使用Java来上传MP4文件到MongoDB,并进行下载操作。 首先,我们需要引入MongoDB的Java驱动程序。MongoDB提供了Java驱动库,通过Maven或Gradle可以轻松添加依赖。在Maven的`pom.xml`中,你...

Global site tag (gtag.js) - Google Analytics