`
zhc0822
  • 浏览: 230382 次
  • 性别: Icon_minigender_1
  • 来自: 宝仔的奇幻城堡
社区版块
存档分类
最新评论

适用于java语言的MongoDB解决方案——Mongernate

阅读更多
闲暇之余,写了一个封装MongoDB数据库访问操作的小程序——Mongernate。
下面简单地介绍一下这个隔离层的特色:
1、业务层的编码人员不需要了解MongoDB的相关语法,即可对数据进行增删改查操作,进行常见开发;
2、支持json、xml和Map三种形式的增删改查方式。可根据项目情况自由选择(Map支持得还不够好)。
3、支持从配置文件dbConfig.properties读取配置信息
4、返回给业务层的所有数据均为java.util.Map形式。

下面是一段测试用例,有详尽的注释。
package com.skyedge.db;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;


/**
 * 演示了Mongernate的使用方法。
 * 
 * @author GaoGao
 * 
 */
public class TestCase {

	/**
	 * @param args
	 */
	@SuppressWarnings("unchecked")
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 测试连接
		System.out.println("=============test connection==============");
		DBManager dm = new DBManager();
		dm.connect();
		// 指定数据库
		dm.use("soccer");
		// 测试json
		System.out.println("=============test json==============");
		// 插入5条数据
		dm.insert("{'name':'Van Der Sar','no':1,'position':'GK'}", "manu");
		dm.insert("{'name':'Wes Brown','no':6,'position':'RB'}", "manu");
		dm.insert("{'name':'Micheal Owen','no':7,'position':'CF'}", "manu");
		dm.insert("{'name':'Wayne Rooney','no':10,'position':'CF'}", "manu");
		dm.insert("{'name':'Ryan Giggs','no':11,'position':'SS'}", "manu");
		// 更改吉格斯的位置
		dm.update("{'name':'Ryan Giggs'}", "{'$set':{'position':'LMF'}}",
				"manu");
		//删除范德萨
		dm.delete("{'name':'Van Der Sar'}", "manu");
		// 查找所有球员,返回的是一个iterator
		Iterator<Map<String, Object>> it = dm.selectIterator("manu");
		// 应当输出 布朗、欧文、鲁尼和吉格斯
		while (it.hasNext()) {
			System.out.println(it.next());
		}
		System.out.println("-------------------");
		// 选择球衣号码大于6的球员, 返回一个数组
		ArrayList<Map<String, Object>> arr = dm.selectArray("{'no':{'$gt':6}}",
				"manu");
		// 应当输出欧文(7号),鲁尼10号,和吉格斯11号
		for (int i = 0; i < arr.size(); i++) {
			System.out.println(arr.get(i).get("name"));
		}
		
		
		dm.dropTable("manu");
		
		
		// 测试map
		System.out.println("=============test map==============");
		// 插入3条数据
		Map m = new HashMap<String, Object>();
		m.put("name", "Van Der Sar");
		m.put("no", 1);
		dm.insert(m, "manu");
		m = new HashMap<String, Object>();
		m.put("name", "Brown");
		m.put("no", 6);
		dm.insert(m, "manu");
		m = new HashMap<String, Object>();
		m.put("name", "Owen");
		m.put("no", 8);
		dm.insert(m, "manu");
		// 将欧文改为吉格斯
		Map m1 = new HashMap<String, Object>();
		m1.put("name", "Giggs");
		m1.put("no", 11);
		dm.update(m, m1, "manu");
		// 查询所有球员,返回一个iterator
		it = dm.selectIterator("manu");
		// 输出 范德萨、布朗和吉格斯
		while (it.hasNext()) {
			System.out.println(it.next());
		}
		System.out.println("-------------------");
		// 查找球员吉格斯
		arr = dm.selectArray(m1,
				"manu");
		// 输出吉格斯
		for (int i = 0; i < arr.size(); i++) {
			System.out.println(arr.get(i).get("name"));
		}
		
		dm.dropTable("manu");
		
		
		// 测试 xml
		System.out.println("=============test xml==============");
		// 插入4条数据
		dm.insertFromXml("<player><name>Anderson</name><no>8</no><position>AMF</position></player>", "manu");
		dm.insertFromXml("<player><name>Evans</name><no>23</no><position>CB</position></player>", "manu");
		dm.insertFromXml("<player><name>Carrick</name><no>16</no><position>CMF</position></player>", "manu");
		dm.insertFromXml("<player><name>Evra</name><no>3</no><position>LB</position></player>", "manu");
		// 把16号球员(卡里克)改为维迪奇
		dm.updateFromXml("<no>16</no>", "<player><name>Vidic</name><no>15</no><position>CB</position></player>",
				"manu");
		//删除位置为AMF的球员(安德森)
		dm.deleteFromXml("<position>AMF</position>", "manu");
		// 查找所有的中卫,返回一个iterator
		it = dm.selectIteratorFromXml("<position>CB</position>","manu");
		// 应当输出维迪奇和埃文斯
		while (it.hasNext()) {
			System.out.println(it.next());
		}
		dm.dropTable("manu");
	}

}



运行结果:




附件中提供了测试用例的Eclipse工程。同时还附带了mongodb1.4的java driver和Mongernate的jar包。
因为源码写得很丑,过几天整理了之后,再发上来和大家共同讨论。
使用过程中遇到问题的,请站内信。谢谢你们。
  • 大小: 8.4 KB
4
3
分享到:
评论
7 楼 skzr.org 2011-04-23  
不错的建议,呵呵,估计到下半年才有时间开始这个设计,希望出现了相关的东西可以拿过来用吧。

zhc0822 写道
skzr.org 写道
我一直在构思利用一款nosql,存储我们公司的数据(数据特点采集数据只读时间顺序的,接近海量)。对外提供方便的查询和检索。
没啥思路:
利用antlr做一个语法解析器datas query language,然后仿造gae的存储api做。
目前思路,不知道楼主的这个设计有没有设计图,看代码还是麻烦的。

文中的设计非常粗糙,而且功能简单,充其量只能算个DbUtils。
GAE的存储API是实现了JDO和JPA吧,我建议你上Google Code下载GAE SDK的源代码,然后找一款逆向工程工具就可以还原为UML了。下载地址:http://code.google.com/p/googleappengine/downloads/list

kimmking 写道
skzr.org 写道
我一直在构思利用一款nosql,存储我们公司的数据(数据特点采集数据只读时间顺序的,接近海量)。对外提供方便的查询和检索。
没啥思路:
利用antlr做一个语法解析器datas query language,然后仿造gae的存储api做。
目前思路,不知道楼主的这个设计有没有设计图,看代码还是麻烦的。

可以看看 treapdb
代码很少

6 楼 kimmking 2011-04-23  
skzr.org 写道
我一直在构思利用一款nosql,存储我们公司的数据(数据特点采集数据只读时间顺序的,接近海量)。对外提供方便的查询和检索。
没啥思路:
利用antlr做一个语法解析器datas query language,然后仿造gae的存储api做。
目前思路,不知道楼主的这个设计有没有设计图,看代码还是麻烦的。

可以看看 treapdb
代码很少
5 楼 kimmking 2011-04-23  
zhc0822 写道
kimmking 写道
这个想法不错。

多谢。我们后来又设计了一个相对完善的框架,并用于项目之中。甚至还一度非常想要发展成为一款nosql的ORM,现在想想,还好当时没有冲动。



mongodb的 orm 和 jdbc都有了。
http://code.google.com/p/morphia/
https://github.com/erh/mongo-jdbc
4 楼 zhc0822 2011-04-22  
skzr.org 写道
我一直在构思利用一款nosql,存储我们公司的数据(数据特点采集数据只读时间顺序的,接近海量)。对外提供方便的查询和检索。
没啥思路:
利用antlr做一个语法解析器datas query language,然后仿造gae的存储api做。
目前思路,不知道楼主的这个设计有没有设计图,看代码还是麻烦的。

文中的设计非常粗糙,而且功能简单,充其量只能算个DbUtils。
GAE的存储API是实现了JDO和JPA吧,我建议你上Google Code下载GAE SDK的源代码,然后找一款逆向工程工具就可以还原为UML了。下载地址:http://code.google.com/p/googleappengine/downloads/list
3 楼 skzr.org 2011-04-22  
我一直在构思利用一款nosql,存储我们公司的数据(数据特点采集数据只读时间顺序的,接近海量)。对外提供方便的查询和检索。
没啥思路:
利用antlr做一个语法解析器datas query language,然后仿造gae的存储api做。
目前思路,不知道楼主的这个设计有没有设计图,看代码还是麻烦的。
2 楼 zhc0822 2011-04-22  
kimmking 写道
这个想法不错。

多谢。我们后来又设计了一个相对完善的框架,并用于项目之中。甚至还一度非常想要发展成为一款nosql的ORM,现在想想,还好当时没有冲动。
1 楼 kimmking 2011-04-22  
这个想法不错。

相关推荐

    java+MongoDB实现存图片、下载图片的方法示例

    在本文中,我们将使用java作为开发语言,并配合MongoDB数据库来存储和下载图片。java是一种广泛使用的编程语言,known for its platform independence和large community support。MongoDB是一种NoSQL数据库,known ...

    读书笔记:《左手MongoDB右手Redis——从入门到商业实战》书籍配套源代码。.zip

    读书笔记:《左手MongoDB右手Redis——从入门到商业实战》书籍配套源代码。

    java连接mongodb的jar包

    Java连接MongoDB主要依赖于MongoDB的Java驱动程序,这是一个允许Java应用程序与MongoDB数据库进行交互的库。在本文中,我们将深入探讨如何使用Java连接MongoDB,涉及的知识点包括MongoDB Java驱动程序的安装、配置,...

    java操作mongodb存储文件实例

    将一系列图片文件存储到MongoDB中 java操作mongodb存储文件

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

    MongoDB 是一个流行的开源、高性能、无模式的文档型...通过以上步骤,你可以实现文件的上传、下载、查询和删除,为你的应用程序提供了高效的数据存储解决方案。在实际开发中,记得根据需求调整错误处理和优化性能。

    java 操作mongodb 增删改查

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

    java中mongodb使用环境详细配置

    Java 中 MongoDB 使用环境详细配置 Java 中 MongoDB 使用环境详细配置是指在 Windows 平台(WinXP)上安装、运行、安装 Windows 服务的笔记,以作备忘。下面是一些重要的知识点: 1. MongoDB 的下载和安装 ...

    java连接mongodb.zip

    Java连接MongoDB是一个常见的任务,尤其在大数据处理和分布式存储的场景中。MongoDB是一个流行的文档型...通过理解这些概念和实践,开发者能够有效地在Java应用中集成MongoDB,构建强大的数据存储和处理解决方案。

    Java连接mongoDB需要的jar包

    总的来说,Java连接MongoDB主要依赖于这三个JAR包,它们共同构成了Java开发MongoDB应用的基础框架。正确理解和使用这些库可以让你轻松地在Java项目中集成MongoDB的功能,实现高效的数据存储和检索。

    Java + MongoDB 实现 hello world 例子(译)

    MongoDB是一款流行的、基于文档的NoSQL数据库,而Java是广泛应用于企业级开发的编程语言。结合两者,我们可以构建高效、灵活的数据驱动应用程序。 首先,确保你已经安装了MongoDB服务器并启动了它。你可以从MongoDB...

    jdbc java mongodb mysql 相互同步

    首先,我们需要理解JDBC,它是Java语言访问数据库的标准API,能够连接并操作多种类型的数据库。对于MySQL,JDBC提供了连接、查询、插入、更新和删除数据的能力。要使用JDBC,我们需要引入对应的数据库驱动,例如`...

    Java全能学习面试手册——Java面试题库.zip

    Java全能学习面试手册——Java面试题库.zip 01 7道消息队列ActiveMQ面试题!.pdf 02 10道Java高级必备的Netty面试题!.pdf 03 10道Java面试必备的设计模式面试题!.pdf 04 10个Java经典的List面试题!.pdf 05 10个...

    java 操作mongodb

    总之,Java 与 MongoDB 结合提供了一种强大而灵活的方式来处理非结构化和半结构化数据,适用于现代 Web 应用和大数据处理场景。通过不断学习和实践,开发者可以更好地利用这两个工具来构建高效的应用程序。

    java实现mongodb数据库的操作

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

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

    复制集则是MongoDB提供的一种高可用性解决方案,通过在多个节点间复制数据来确保服务的持续性。 在"Java使用MongoDB的简单程序"中,我们将学习如何使用Java驱动程序连接到MongoDB数据库。Java驱动程序提供了一套API...

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

    这里提到的"Java连接mongoDB需要的jar包(3.9.1)"是指Java开发者用于连接MongoDB数据库的一组关键库文件,包括`bson-3.9.1.jar`、`mongodb-driver-3.9.1.jar`和`mongodb-driver-core-3.9.1.jar`。这些JAR文件是...

    通过java向mongodb中插入数据

    1. **下载安装包**: 首先,你需要从MongoDB官网下载适用于Linux的安装包,例如`mongodb-linux-x86_64-2.6.4.tgz`。 2. **解压安装**: 在Linux中,使用`tar -zxvf`命令解压下载的安装包,然后重命名解压后的目录,...

Global site tag (gtag.js) - Google Analytics