用xml模拟数据库,并实现基本的CURD操作
来源:互联网 发布:网络分线器很慢 编辑:程序博客网 时间:2024/05/16 08:58
文件一共有2个,一个接口,一个实现,定义接口是为了以后用其他任意数据库或者其他方法都不用修改其他代码,只要重新设计实现类就Ok了
程序使用了DOM4j BeanUtils Logging 三个第三方jar包
程序使用了DOM4j BeanUtils Logging 三个第三方jar包
还没有学数据库的平时想做一些数据的CURD可以用这个临时代替一下.
package com.sunsheng.dao.inter;import java.io.IOException;import java.lang.reflect.InvocationTargetException;import java.util.List;import com.sunsheng.Exception.IdNotFoundException;public interface CURD { /** * 把javabean写入到xml文件中 * @param record * @throws IOException * @throws IllegalAccessException * @throws InvocationTargetException * @throws NoSuchMethodException */ void create(Object record) throws IOException, IllegalAccessException, InvocationTargetException, NoSuchMethodException; /** * 根据指定的id修改xml数据 * @param id * @param record * @throws IOException * @throws IllegalAccessException * @throws InvocationTargetException * @throws NoSuchMethodException */ void update(int id, Object record) throws IOException, IllegalAccessException, InvocationTargetException, NoSuchMethodException; /** * 获得所有的xml元素 * @return 返回值是所有bean的list集合 * @throws IllegalAccessException * @throws InvocationTargetException * @throws InstantiationException */ List read() throws IllegalAccessException, InvocationTargetException, InstantiationException; /** * 删除指定id的元素 * @param id * @throws IdNotFoundException * @throws IOException */ void delete(int id) throws IdNotFoundException, IOException;}
package com.sunsheng.dao.imp;import java.beans.PropertyDescriptor;import java.io.*;import java.lang.reflect.InvocationTargetException;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import org.apache.commons.beanutils.BeanUtils;import org.apache.commons.beanutils.PropertyUtils;import org.dom4j.*;import org.dom4j.io.*;import com.sunsheng.Exception.IdNotFoundException;import com.sunsheng.dao.inter.CURD;import com.sunsheng.domain.Person;public class XMLImp implements CURD { private Document document; private Class clazz; private static XMLImp instance = new XMLImp(); private XMLImp() { super(); } public static XMLImp getInstance() { return instance; } /** * 初始化document对象,如果xml不存在,会自动创建一个,根节点默认是records * @param clazz 要转换成xml文件的bean的Class * @throws DocumentException * @throws IOException */ public void init(Class clazz) throws DocumentException, IOException { init(clazz, "records"); } /** * * @param clazz * @param root 手动设置根节点的名字 * @throws DocumentException * @throws IOException */ public void init(Class clazz, String root) throws DocumentException, IOException { this.clazz = clazz; SAXReader reader = new SAXReader(); File file = new File("abc.xml"); //判断文件是否存在 if (!file.exists()) { //不存在的话,创建一个空文件,留给xml2File方法使用 file.createNewFile(); //创建一个document对象,往这个对象里面添加一个根元素. document = DocumentHelper.createDocument(); document.addElement(root); } else //存在就直接读文件 document = reader.read(file); } @Override public void create(Object record) throws IOException, IllegalAccessException, InvocationTargetException, NoSuchMethodException { // 获得xml文件的根节点 Element root = document.getRootElement(); // 根据record得到标签的名字 String tagName = getTagName(); // 得到record的id属性 String value = (BeanUtils.getProperty(record, "id")); // 创建一个element,并添加到root下面,设置一个属性id Element element = root.addElement(tagName).addAttribute("id", value); // 在element下面创建多个子元素用来保存record的每一个属性 PropertyDescriptor[] pds = PropertyUtils.getPropertyDescriptors(record); for (PropertyDescriptor pd : pds) { // 得到属性名,作为子标签名字. String childTagname = pd.getName(); // 继承自Object类的class属性不存到xml中 if ("class".equals(childTagname)) continue; // 得到该属性get方法返回值作为标签的text属性 String childTagValue = pd.getReadMethod().invoke(record, null) .toString(); // 用得到的属性名和值添加一个子元素 element.addElement(childTagname).addText(childTagValue); } // 保存xml到文件中 xml2File(); } @Override public void update(int id, Object record) throws IOException, IllegalAccessException, InvocationTargetException, NoSuchMethodException { Person person = (Person) record; Element element = (Element) document.selectSingleNode("//person[@id=" + id + "]"); for (Iterator iterator = element.elementIterator(); iterator.hasNext();) { Element e = (Element) iterator.next(); // 获得标签的名字 String name = e.getName(); // 通过标签名字得到bean的属性值 String text = BeanUtils.getProperty(person, name); // 修改标签的text值 e.setText(text); } xml2File(); } @Override public List read() throws IllegalAccessException, InvocationTargetException, InstantiationException { List beans = new ArrayList(); List list = document.selectNodes("//" + getTagName()); // System.out.println(list); for (Iterator iterator = list.iterator(); iterator.hasNext();) { Object bean = clazz.newInstance(); Element e = (Element) iterator.next(); // 得到元素的所有属性对象 List<Attribute> atts = e.attributes(); for (Attribute att : atts) { // 遍历每一个属性,按属性名和值设置到对应的bean中 BeanUtils.setProperty(bean, att.getName(), att.getValue()); } Iterator it = e.elementIterator(); while (it.hasNext()) { Element value = (Element) it.next(); BeanUtils.setProperty(bean, value.getName(), value.getText()); } beans.add(bean); } return beans; } @Override public void delete(int id) throws IdNotFoundException, IOException { // 获得xml文件的根节点 Node node = document.selectSingleNode("//" + getTagName() + "[@id=" + id + "]"); if (node != null) { node.detach(); xml2File(); } else { throw new IdNotFoundException("您要删除的ID不存在"); } } private void xml2File() throws IOException { OutputFormat format = OutputFormat.createPrettyPrint(); XMLWriter writer; writer = new XMLWriter(new FileWriter("abc.xml"), format); writer.write(document); writer.close(); } private String getTagName() { String beanName = clazz.getName(); String tagName = beanName.substring(beanName.lastIndexOf(".") + 1) .toLowerCase(); return tagName; }}
- 用xml模拟数据库,并实现基本的CURD操作
- mysql数据库实现CURD操作
- ThinkPhp基本的curd操作
- ThinkPhp基本的curd操作
- ThinkPHP5.0的基本CURD操作
- JDBC连接常用数据库 基本的CURD
- JDBC连接常用数据库 基本的CURD
- Yii CURD 基本操作
- 整合Thinkphp数据库基本操作CURD,界面datagrid采用EasyUi的Demo
- 二:使用yii框架建立应用(数据库CURD基本操作)
- thinkphp数据库操作CURD
- wordpress数据库CURD操作
- ThinkPHP 数据库CURD操作
- ZendFrameset 数据库CURD操作
- yii-数据库CURD操作
- 一行代码实现FMDB的CURD操作
- Springboot链接数据库 并curd
- Mogodb的Shell基本操作笔记(CURD)
- Lock与synchronized 的区别
- 在Oracle中实现SELECT TOP N的方法
- VC++任务栏托盘图标及右键菜单实现
- 学习opencv
- Android金毛狮王之Service
- 用xml模拟数据库,并实现基本的CURD操作
- android adb push 与 adb install的比较(两种安装APK的方法)
- CXF学习总结2 添加拦截器+整合Spring
- cygwin生成so
- (转载)毕业论文反侦测抄袭的攻略(精简浓缩版)
- Jquery+Ajax 局部刷新方法介绍
- 多线程学习笔记(2)
- usb_submit_urb()
- OC第五课(@class与#import)property参数使用