模仿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
模仿mongodb采用xml+json实现小型数据库相关推荐
- 如何使用XML作为小型数据库
如何使用XML作为小型数据库? 首先,我们以下面的user.xml作为我们所要使用的xml文件,具体内容如下: <?xml version="1.0" encoding=&q ...
- 用xml充当小型数据库案例
利用dom4j工具,将user.xml作为一个小型的数据库,然后控制台输入进行用户名与密码的匹配 /*user.xml文件放在src下*/ <?xml version="1.0&quo ...
- 汽车管理案例(使用XML作为小型数据库)
问题:汽车具有颜色.型号.品牌.售价四个属性.实现CRUD,其中查询时支持模糊查询.比如:[一汽大众] 我输入大众也可以查到. 主要有四步: 1.创建汽车对象,封装数据. 2.创建xml表,作为数据库 ...
- 万能的数据传输格式——XML/json
一.XML简介 1.历史起源 gml(1969)->sgml(1985)->html(1993)->xml(1998) Genaral Markup language gml : ...
- mongodb添加创建修改时间_MongoDB数据库插入、更新和删除操作详解
一.Insert操作 Insert操作是MongoDB插入数据的基本方法,对目标集合使用Insert操作,会将该文档添加到MongoDB并自动生成相应的ID键.文档结构采用类似JSON的BSON格式. ...
- R语言学习丨数据存储文件格式知识,CSV,EXCEL,XML,JSON,MYSQL等
今天笔记的主要学习内容是R语言里文件相关知识,包含CSV.Excel.XML.JSON.MySQL等. CSV文件 基本介绍 CSV(Comma-Separated Values,字符分隔值,分隔字符 ...
- MongoDB和Java(4):Spring Data整合MongoDB(XML配置)
最近花了一些时间学习了下MongoDB数据库,感觉还是比较全面系统的,涉及了软件安装.客户端操作.安全认证.副本集和分布式集群搭建,以及使用Spring Data连接MongoDB进行数据操作,收获很 ...
- 发布json数据_数据库每周国际新闻 20201211
数据库每周国际新闻 2020-12-11阅览文章内容详情,请点击最下方的"阅读原文"!备注:原文内含有文章原有链接,详细信息均可通过原文链接查看.英文原文地址:https://db ...
- XML Json
XML && Json 一.XML XML即可扩展标记语言(eXtensible Markup Language).标记是指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包 ...
最新文章
- 在CentOS 6.2上搭建vim开发环境
- html post no js,接受POST请求的Node.js服务器
- python去除字符串中的单词_从字符串中删除单词列表
- 数据结构和算法:第七章 排序
- 卡巴斯基:乌云反思 企业安全堪忧
- 大学计算机应用技术基础,大学计算机应用技术基础实践教程(Windows7+Office2010/21世纪高等学校计算机规划教材...
- 【渝粤题库】陕西师范大学200771 可视化程序设计
- php基础:变量命名、传值、检测、类型转换、动态变量名
- proteus常用元器件名称
- 孔乙己:new的五种写法
- 知识点:vs2017 git 操作重置、还原、挑拣对比
- 全网最全最新的免版权图库
- 网站设计之常见简单实用的JavaScript特效总结(上篇)
- lettuce连接池真有必要吗?
- MIPI扫盲系列博文
- python有趣小程序 表白-python表白小程序
- verilog读取bmp格式图片
- 换了工作城市,社保和公积金的转移
- 物联卡是什么?有什么用?可以用在什么设备上?
- 双屏计算机主机是什么,双屏显示器怎么连接(台式机连接步骤教程) - 双屏显示器怎么设置_双屏显示器怎么连接_双屏显示器有什么用(电脑)...
热门文章
- apache shiro版本查看_深入学习SpringBoot(四):springboot整合shiro
- (王道408考研数据结构)第五章树-第三节2:二叉树构造和重建
- Linux系统编程10:进程入门之系统编程中最重要的概念之进程进程的相关操作使用fork创建进程
- 高性能、高并发TCP服务器(多线程调用libevent)
- 计算两个矩阵相乘(Java)
- 对于一个十进制数A,将A转换为二进制数,然后按位逆序排列,再转换为十进制数(Java)
- Golang生成C动态库.so和静态库.a
- 利用nc测试服务器之间端口之间的连通性
- 设计模式:策略模式(C++)【诸葛亮的锦囊妙计】
- 查找算法:折半查找算法实现及分析