`
zhangdaiscott
  • 浏览: 447978 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
8fb25857-16b4-3681-ab5e-e319f45c42a8
Jeecg快速开发平台
浏览量:0
文章分类
社区版块
存档分类

模仿mongodb采用xml+json实现小型数据库

 
阅读更多

mini-mongodb

   模仿mongodb采用Xml+json实现小型数据库;
    1.实现数据库创建
    2.表的创建
    3.表数据的增、删、改、查

    供大家参考学习使用,有助于更好的了解MongoDB的实现原理!
代码下载地址:http://zhangdaiscott.github.io/mini-mogodb

   package org.jeecgframework;


import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;


import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;


import com.google.gson.Gson;


public class MiniMogodb {
	private static final String _uuid = "_uuid";


	/**
	 * 获取表的全部数据
	 *
	 * @param path
	 * @param tablename
	 * @return
	 * @throws Exception
	 */
	public List<Map> loadTableDatas(String path, String tablename) throws Exception {
		Gson gson = new Gson();
		FileInputStream file = new FileInputStream(path);
		SAXBuilder saxBuilder = new SAXBuilder();
		Document document = saxBuilder.build(file);
		Element root = document.getRootElement();


		List<Map> l = new ArrayList();
		List<Element> list = root.getChildren();
		for (Element x : list) {
			if (x.getAttributeValue("name").equals(tablename)) {
				List<Element> al = x.getChildren();
				for (Element s : al) {
					String data = s.getText();
					if (data == null) {
						break;
					}
					Map mp = gson.fromJson(data, Map.class);
					l.add(mp);
				}
			}
		}
		return l;
	}


	/**
	 * 表插入数据
	 *
	 * @param path
	 * @param tablename
	 * @param po
	 * @return
	 * @throws JDOMException
	 * @throws IOException
	 */
	public boolean addData(String path, String tablename, Object po)
			throws JDOMException, IOException {
		Gson gson = new Gson();
		boolean flag = false;
		FileInputStream file = new FileInputStream(path);
		SAXBuilder saxBuilder = new SAXBuilder();
		Document document = saxBuilder.build(file);
		Element root = document.getRootElement();


		List<Element> list = root.getChildren();
		for (Element x : list) {
			if (x.getAttributeValue("name").equals(tablename)) {
				Map base = new HashMap();
				base.put(_uuid, UUID.randomUUID().toString());
				Element data = new Element("data");
				String json = gson.toJson(po);
				Map mp = gson.fromJson(json, Map.class);
				base.putAll(mp);
				data.addContent(gson.toJson(base));
				x.addContent(data);
			}
		}
		XMLOutputter out = new XMLOutputter();
		out.output(document, new FileOutputStream(path));
		flag = true;
		System.out
				.println("----------insert --- data --- success----------------------");
		return flag;
	}


	/**
	 * 表修改数据
	 *
	 * @param path
	 * @param tablename
	 * @param po
	 * @throws JDOMException
	 * @throws IOException
	 */
	public void updateData(String path, String tablename, Object po)
			throws JDOMException, IOException {
		FileInputStream file = new FileInputStream(path);
		SAXBuilder saxBuilder = new SAXBuilder();
		Document document = saxBuilder.build(file);
		Element root = document.getRootElement();
		Gson gson = new Gson();


		List<Element> list = root.getChildren();
		for (Element x : list) {
			if (x.getAttributeValue("name").equals(tablename)) {
				List<Element> al = x.getChildren();
				for (Element s : al) {
					// 如果定位Data[通过UUID唯一标示]
					Map mp = gson.fromJson(s.getText(), Map.class);
					Map newmp = gson.fromJson(gson.toJson(po), Map.class);
					if (mp.get(_uuid).equals(newmp.get(_uuid))) {
						mp.putAll(newmp);
						Element data = new Element("data");
						data.setText(gson.toJson(mp));
						x.removeContent(s);
						x.addContent(data);
						break;
					}
				}
			}
		}
		XMLOutputter out = new XMLOutputter();
		out.output(document, new FileOutputStream(path));
		System.out
		.println("----------update --- data --- success----------------------");
	}


	/**
	 * 表删除数据
	 *
	 * @param path
	 * @param tablename
	 * @param po
	 * @throws JDOMException
	 * @throws IOException
	 */
	public void deleteData(String path, String tablename, Object po)
			throws JDOMException, IOException {
		FileInputStream file = new FileInputStream(path);
		Gson gson = new Gson();
		SAXBuilder saxBuilder = new SAXBuilder();
		Document document = saxBuilder.build(file);
		Element root = document.getRootElement();
		List<Element> list = root.getChildren();
		for (Element x : list) {
			List<Element> al = x.getChildren();
			if (x.getAttributeValue("name").equals(tablename)) {
				for (Element s : al) {
					// 如果定位Data[通过UUID唯一标示]
					Map mp = gson.fromJson(s.getText(), Map.class);
					Map newmp = gson.fromJson(gson.toJson(po), Map.class);
					if (mp.get(_uuid).equals(newmp.get(_uuid))) {
						x.removeContent(s);
						break;
					}
				}
			}
		}
		XMLOutputter out = new XMLOutputter();
		out.output(document, new FileOutputStream(path));
		System.out
		.println("----------delete --- data --- success----------------------");
	}


	/**
	 * 创建数据库
	 *
	 * @param path
	 * @throws Exception
	 */
	public void createDataBase(String path) throws Exception {
		FileOutputStream file1 = new FileOutputStream(path);
		Document document = new Document();
		Element root = new Element("database");
		Element sort1 = new Element("table");
		sort1.setAttribute("name", "test");
		Element sort2 = new Element("table");
		sort2.setAttribute("name", "system.indexs");
		Element sort3 = new Element("table");
		sort3.setAttribute("name", "system.users");


		root.addContent(sort1);
		root.addContent(sort2);
		root.addContent(sort3);


		document.setRootElement(root);
		XMLOutputter out = new XMLOutputter();
		out.output(document, file1);
		System.out
				.println("----------create---database---success-------------------");
	}
}
<?xml version="1.0" encoding="UTF-8"?>
<database>
	<table name="test">
		<data>{"sex":"男","age":20.0,"name":"lisan","money":2000.98,"_uuid":"a2b64d1a-63ea-4a1b-b1e3-67adcc687c0a"}
		</data>
	</table>
	<table name="system.indexs" />
	<table name="system.users" />
</database>

   * 作者:     张代浩
   * 技术论坛:[www.jeecg.org](http://www.jeecg.org)
   * 邮箱:  jeecg@sina.com
   * 交流群:325978980,143858350
分享到:
评论

相关推荐

    nodejs+express+mongodb+bootstrap+jquery+ejs写的电影demo

    标题中的“nodejs+express+mongodb+bootstrap+jquery+ejs写的电影demo”表明这是一个使用Node.js、Express框架、MongoDB数据库、Bootstrap前端框架、jQuery库以及EJS模板引擎开发的电影相关的应用程序示例。...

    Mina+Mongodb+Mybatis+数据库连接池实例

    "Mina+Mongodb+Mybatis+数据库连接池实例" 这个标题表明,我们将讨论一个具体的项目实例,它结合了多种技术,包括Mina(一个用于构建高性能、高可用性的网络应用程序的Java框架)、MongoDB(一个流行的NoSQL数据库...

    springboot整合mongodb+redis+mybatis+mysql

    6. **Mapper 接口和 XML 文件**:定义数据库操作的 SQL 语句。 7. **Service 类**:业务逻辑层,调用 DAO 层的方法进行数据操作。 8. **Controller 类**:处理 HTTP 请求,将数据传递给视图或直接返回 JSON 响应。 ...

    基于Vue+Nodejs+MongoDB实现的超市后台商品的订单管理系统代码+文档说明+数据库

    基于Vue+Nodejs+MongoDB实现的超市后台商品的订单管理系统代码+文档说明+数据库,含有代码注释,新手也可看懂,个人手打98分项目,导师非常认可的高分项目,毕业设计、期末大作业和课程设计高分必看,下载下来,简单...

    基于Vue+Nodejs+MongoDB实现的超市后台商品的订单管理系统+源代码+文档说明+数据库 .zip

    基于Vue+Nodejs+MongoDB实现的超市后台商品的订单管理系统+源代码+文档说明+数据库 .zip本资源中的源码都是经过本地编译过可运行的,评审分达到95分以上。资源项目的难度比较适中,内容都是经过助教老师审定过的能够...

    JSON+Support+in+PostgreSQL%2C+MySQL%2C+MongoDB%2C+and+SQL+Server.pdf

    由于其在Web前端的广泛使用,以及在API中的流行取代了XML,JSON已经迅速在各个数据库服务器中获得了重要地位。目前几乎所有的开发者都在使用JSON,这在数据库领域也不例外。 在本篇博客中,将讨论几个流行的数据库...

    Java 解析xml 存入mongodb 返回org.json json包

    总结来说,这个项目涉及了三个主要步骤:使用SAX解析XML文件,将解析得到的数据通过Java驱动存入MongoDB数据库,然后将MongoDB中的数据转换成org.json的JSON格式。这些步骤展示了Java在处理XML、数据库操作以及JSON...

    SpringBoot+MongoDB+Echarts图表数据可视化

    综上所述,"SpringBoot+MongoDB+Echarts图表数据可视化"项目利用SpringBoot作为后端处理逻辑,MongoDB作为数据存储,Echarts作为前端数据展示工具,共同实现了高效、直观的数据可视化解决方案。这个组合在现代Web...

    HRmanagement+MongoDB+js+express

    **MongoDB** MongoDB是一种基于分布式文件存储的开源数据库系统,设计用于处理大量数据并提供...总的来说,"HRmanagement+MongoDB+js+express"项目展示了如何使用这些技术栈来构建一个高效、灵活的人力资源管理系统。

    一个仿知乎论坛博客系统 mongodb+redis+vue.js

    【标题】"一个仿知乎论坛博客系统 mongodb+redis+vue.js"揭示了这个项目的核心技术栈,它是一个基于Web的论坛或博客系统,模仿了知名问答社区知乎的设计和功能。项目采用现代Web开发技术,包括数据库层的MongoDB,...

    spring+springmvc+mybatis+mongodb+ActiveMQ+CXF

    "spring+springmvc+mybatis+mongodb+ActiveMQ+CXF"就是一个典型的技术栈,它涵盖了后端开发、数据库管理、消息队列以及服务接口等多个关键领域。下面我们将详细探讨这些技术及其相互作用。 首先,Spring框架是Java...

    springboot整合maven+mybatis+druid+mongodb+redis

    注意:内涵测试表test.sql表结构和数据 请修改application-dev.yml数据源配置项的数据库名称改为自己名字,并把test.sql导入数据库,配置好IP、账号、密码后...redis mongodb mybatis 测试示例都在 test模块!!!!

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

    MongoDB采用的是键值对存储方式,数据以JSON格式(BSON)存储,这使得数据的读写更加自然和高效。MongoDB支持丰富的查询语法,包括字段选择、条件操作、排序和分组,为开发者提供了极大的便利。同时,它还提供了副本...

    mongodb+spring+hibernate集成入门demo

    在这个"mongodb+spring+hibernate集成入门demo"中,我们将深入探讨如何将这三者有效地结合在一起,以构建一个强大的后端数据处理系统。 首先,MongoDB 是一个基于分布式文件存储的开源NoSQL数据库,它以JSON格式...

    mongoDB增删改查+前端页面实现+idea+themlesf+mybatis

    MongoDB是一种流行的开源文档型数据库,它以JSON格式存储数据,具有高性能、高可用性和可扩展性。在本项目中,我们将探讨如何使用MongoDB进行数据的增删改查操作,以及如何结合前端页面、IntelliJ IDEA开发环境、...

    php+mvc+mongodb数据库基本操作

    MongoDB则是一种分布式文档型数据库,以JSON格式存储数据,适合处理大量非结构化或半结构化数据。现在我们来详细探讨这些知识点。 首先,PHP的MVC架构是一种将业务逻辑、数据和用户界面分离的设计模式。在MVC模式中...

    mongodb+spring+maven环境搭建

    在“mongodb+springmvc+maven环境搭建”过程中,我们需要完成以下步骤: 1. **安装MongoDB**:首先,你需要下载并安装MongoDB服务器。根据操作系统(Windows、Linux或Mac)在MongoDB官网获取相应版本的安装包。安装...

    nodejs+mongodb+express+ejs+connect-mongo

    MongoDB 是一个流行的开源、非关系型数据库系统,它以JSON格式存储数据,非常适合处理结构灵活的数据。MongoDB 与 Node.js 结合使用,可以构建高性能、可扩展的数据库应用。 Express 是基于 Node.js 的一个web应用...

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

    MongoDB 是一个流行的开源、高性能、无模式的文档型数据库,特别适合处理大规模的数据。GridFS 是 MongoDB 提供的一种用于存储和检索大型文件的标准规范,它将大文件分割成多个小块(chunks)存储,方便高效管理和...

    mongodb+spring+strust框架

    在"mongodb+spring+strust框架"的集成中,我们通常会利用Spring的数据访问抽象(DAO)层来管理与MongoDB的交互,而Struts则负责处理用户的请求和视图的展示。以下是一些关于如何将这三者整合的详细知识点: 1. **...

Global site tag (gtag.js) - Google Analytics