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实现小型数据库相关推荐

  1. 如何使用XML作为小型数据库

    如何使用XML作为小型数据库? 首先,我们以下面的user.xml作为我们所要使用的xml文件,具体内容如下: <?xml version="1.0" encoding=&q ...

  2. 用xml充当小型数据库案例

    利用dom4j工具,将user.xml作为一个小型的数据库,然后控制台输入进行用户名与密码的匹配 /*user.xml文件放在src下*/ <?xml version="1.0&quo ...

  3. 汽车管理案例(使用XML作为小型数据库)

    问题:汽车具有颜色.型号.品牌.售价四个属性.实现CRUD,其中查询时支持模糊查询.比如:[一汽大众] 我输入大众也可以查到. 主要有四步: 1.创建汽车对象,封装数据. 2.创建xml表,作为数据库 ...

  4. 万能的数据传输格式——XML/json

    一.XML简介 1.历史起源 gml(1969)->sgml(1985)->html(1993)->xml(1998) Genaral  Markup  language gml : ...

  5. mongodb添加创建修改时间_MongoDB数据库插入、更新和删除操作详解

    一.Insert操作 Insert操作是MongoDB插入数据的基本方法,对目标集合使用Insert操作,会将该文档添加到MongoDB并自动生成相应的ID键.文档结构采用类似JSON的BSON格式. ...

  6. R语言学习丨数据存储文件格式知识,CSV,EXCEL,XML,JSON,MYSQL等

    今天笔记的主要学习内容是R语言里文件相关知识,包含CSV.Excel.XML.JSON.MySQL等. CSV文件 基本介绍 CSV(Comma-Separated Values,字符分隔值,分隔字符 ...

  7. MongoDB和Java(4):Spring Data整合MongoDB(XML配置)

    最近花了一些时间学习了下MongoDB数据库,感觉还是比较全面系统的,涉及了软件安装.客户端操作.安全认证.副本集和分布式集群搭建,以及使用Spring Data连接MongoDB进行数据操作,收获很 ...

  8. 发布json数据_数据库每周国际新闻 20201211

    数据库每周国际新闻 2020-12-11阅览文章内容详情,请点击最下方的"阅读原文"!备注:原文内含有文章原有链接,详细信息均可通过原文链接查看.英文原文地址:https://db ...

  9. XML Json

    XML && Json 一.XML XML即可扩展标记语言(eXtensible Markup Language).标记是指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包 ...

最新文章

  1. 在CentOS 6.2上搭建vim开发环境
  2. html post no js,接受POST请求的Node.js服务器
  3. python去除字符串中的单词_从字符串中删除单词列表
  4. 数据结构和算法:第七章 排序
  5. 卡巴斯基:乌云反思 企业安全堪忧
  6. 大学计算机应用技术基础,大学计算机应用技术基础实践教程(Windows7+Office2010/21世纪高等学校计算机规划教材...
  7. 【渝粤题库】陕西师范大学200771 可视化程序设计
  8. php基础:变量命名、传值、检测、类型转换、动态变量名
  9. proteus常用元器件名称
  10. 孔乙己:new的五种写法
  11. 知识点:vs2017 git 操作重置、还原、挑拣对比
  12. 全网最全最新的免版权图库
  13. 网站设计之常见简单实用的JavaScript特效总结(上篇)
  14. lettuce连接池真有必要吗?
  15. MIPI扫盲系列博文
  16. python有趣小程序 表白-python表白小程序
  17. verilog读取bmp格式图片
  18. 换了工作城市,社保和公积金的转移
  19. 物联卡是什么?有什么用?可以用在什么设备上?
  20. 双屏计算机主机是什么,双屏显示器怎么连接(台式机连接步骤教程) - 双屏显示器怎么设置_双屏显示器怎么连接_双屏显示器有什么用(电脑)...

热门文章

  1. apache shiro版本查看_深入学习SpringBoot(四):springboot整合shiro
  2. (王道408考研数据结构)第五章树-第三节2:二叉树构造和重建
  3. Linux系统编程10:进程入门之系统编程中最重要的概念之进程进程的相关操作使用fork创建进程
  4. 高性能、高并发TCP服务器(多线程调用libevent)
  5. 计算两个矩阵相乘(Java)
  6. 对于一个十进制数A,将A转换为二进制数,然后按位逆序排列,再转换为十进制数(Java)
  7. Golang生成C动态库.so和静态库.a
  8. 利用nc测试服务器之间端口之间的连通性
  9. 设计模式:策略模式(C++)【诸葛亮的锦囊妙计】
  10. 查找算法:折半查找算法实现及分析