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-------------------");
}
}
* 作者: 张代浩
* 技术论坛:[www.jeecg.org](http://www.jeecg.org)
* 邮箱: jeecg@sina.com
* 交流群:325978980,143858350
相关推荐
标题中的“nodejs+express+mongodb+bootstrap+jquery+ejs写的电影demo”表明这是一个使用Node.js、Express框架、MongoDB数据库、Bootstrap前端框架、jQuery库以及EJS模板引擎开发的电影相关的应用程序示例。...
"Mina+Mongodb+Mybatis+数据库连接池实例" 这个标题表明,我们将讨论一个具体的项目实例,它结合了多种技术,包括Mina(一个用于构建高性能、高可用性的网络应用程序的Java框架)、MongoDB(一个流行的NoSQL数据库...
6. **Mapper 接口和 XML 文件**:定义数据库操作的 SQL 语句。 7. **Service 类**:业务逻辑层,调用 DAO 层的方法进行数据操作。 8. **Controller 类**:处理 HTTP 请求,将数据传递给视图或直接返回 JSON 响应。 ...
基于Vue+Nodejs+MongoDB实现的超市后台商品的订单管理系统代码+文档说明+数据库,含有代码注释,新手也可看懂,个人手打98分项目,导师非常认可的高分项目,毕业设计、期末大作业和课程设计高分必看,下载下来,简单...
基于Vue+Nodejs+MongoDB实现的超市后台商品的订单管理系统+源代码+文档说明+数据库 .zip本资源中的源码都是经过本地编译过可运行的,评审分达到95分以上。资源项目的难度比较适中,内容都是经过助教老师审定过的能够...
由于其在Web前端的广泛使用,以及在API中的流行取代了XML,JSON已经迅速在各个数据库服务器中获得了重要地位。目前几乎所有的开发者都在使用JSON,这在数据库领域也不例外。 在本篇博客中,将讨论几个流行的数据库...
总结来说,这个项目涉及了三个主要步骤:使用SAX解析XML文件,将解析得到的数据通过Java驱动存入MongoDB数据库,然后将MongoDB中的数据转换成org.json的JSON格式。这些步骤展示了Java在处理XML、数据库操作以及JSON...
综上所述,"SpringBoot+MongoDB+Echarts图表数据可视化"项目利用SpringBoot作为后端处理逻辑,MongoDB作为数据存储,Echarts作为前端数据展示工具,共同实现了高效、直观的数据可视化解决方案。这个组合在现代Web...
**MongoDB** MongoDB是一种基于分布式文件存储的开源数据库系统,设计用于处理大量数据并提供...总的来说,"HRmanagement+MongoDB+js+express"项目展示了如何使用这些技术栈来构建一个高效、灵活的人力资源管理系统。
【标题】"一个仿知乎论坛博客系统 mongodb+redis+vue.js"揭示了这个项目的核心技术栈,它是一个基于Web的论坛或博客系统,模仿了知名问答社区知乎的设计和功能。项目采用现代Web开发技术,包括数据库层的MongoDB,...
"spring+springmvc+mybatis+mongodb+ActiveMQ+CXF"就是一个典型的技术栈,它涵盖了后端开发、数据库管理、消息队列以及服务接口等多个关键领域。下面我们将详细探讨这些技术及其相互作用。 首先,Spring框架是Java...
注意:内涵测试表test.sql表结构和数据 请修改application-dev.yml数据源配置项的数据库名称改为自己名字,并把test.sql导入数据库,配置好IP、账号、密码后...redis mongodb mybatis 测试示例都在 test模块!!!!
MongoDB采用的是键值对存储方式,数据以JSON格式(BSON)存储,这使得数据的读写更加自然和高效。MongoDB支持丰富的查询语法,包括字段选择、条件操作、排序和分组,为开发者提供了极大的便利。同时,它还提供了副本...
在这个"mongodb+spring+hibernate集成入门demo"中,我们将深入探讨如何将这三者有效地结合在一起,以构建一个强大的后端数据处理系统。 首先,MongoDB 是一个基于分布式文件存储的开源NoSQL数据库,它以JSON格式...
MongoDB是一种流行的开源文档型数据库,它以JSON格式存储数据,具有高性能、高可用性和可扩展性。在本项目中,我们将探讨如何使用MongoDB进行数据的增删改查操作,以及如何结合前端页面、IntelliJ IDEA开发环境、...
MongoDB则是一种分布式文档型数据库,以JSON格式存储数据,适合处理大量非结构化或半结构化数据。现在我们来详细探讨这些知识点。 首先,PHP的MVC架构是一种将业务逻辑、数据和用户界面分离的设计模式。在MVC模式中...
在“mongodb+springmvc+maven环境搭建”过程中,我们需要完成以下步骤: 1. **安装MongoDB**:首先,你需要下载并安装MongoDB服务器。根据操作系统(Windows、Linux或Mac)在MongoDB官网获取相应版本的安装包。安装...
MongoDB 是一个流行的开源、非关系型数据库系统,它以JSON格式存储数据,非常适合处理结构灵活的数据。MongoDB 与 Node.js 结合使用,可以构建高性能、可扩展的数据库应用。 Express 是基于 Node.js 的一个web应用...
MongoDB 是一个流行的开源、高性能、无模式的文档型数据库,特别适合处理大规模的数据。GridFS 是 MongoDB 提供的一种用于存储和检索大型文件的标准规范,它将大文件分割成多个小块(chunks)存储,方便高效管理和...
在"mongodb+spring+strust框架"的集成中,我们通常会利用Spring的数据访问抽象(DAO)层来管理与MongoDB的交互,而Struts则负责处理用户的请求和视图的展示。以下是一些关于如何将这三者整合的详细知识点: 1. **...