日期:2014-05-16  浏览次数:20597 次

模仿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.getChil