Xml replace DB operate(select, delete, add, update)

Application construct:

xmldemo:
- src
- com.djh.michael.bean

- User.java

- com.djh.michael.dao

- XmlDao.java

- com.djh.michael.utils

- XmlUtils.java

- com.djh.michael.exception

- UserAlreadyExists.java

- UserNotFoundException.java

- com.djh.michael.test

- TestCase.java

JavaBean: User.java

package com.djh.michael.bean;

public class User {
	private String id;
	private String name;
	private int age;
	private String currency;
	private int quality;
	private double price;

	public User() {
		super();
		// TODO Auto-generated constructor stub
	}

	public User(String id, String name, int age, String currency, int quality,
			double price) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
		this.currency = currency;
		this.quality = quality;
		this.price = price;
	}
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getCurrency() {
		return currency;
	}
	public void setCurrency(String currency) {
		this.currency = currency;
	}
	public int getQuality() {
		return quality;
	}
	public void setQuality(int quality) {
		this.quality = quality;
	}
	public double getPrice() {
		return price;
	}
	public void setPrice(double price) {
		this.price = price;
	}

	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", age=" + age
				+ ", currency=" + currency + ", quality=" + quality
				+ ", price=" + price + "]";
	}
}

DAO:XmlDAO.java

package com.djh.michael.dao;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;

import com.djh.michael.bean.User;
import com.djh.michael.exception.UserAlreadyExists;
import com.djh.michael.exception.UserNotFoundException;
import com.djh.michael.utils.XmlUtils;

public class XmlDao {
	String path = "src/users.xml";
	private User user = null;
	//select one data.
	public User getOneUser(String id){
		try {
			//get the Document object via class of utils.
			Document document = XmlUtils.getDocument(path);
			Element rootElement = document.getRootElement();
			//select the one record via field of id.
			List<Element> list = rootElement.selectNodes("/users/user[id=" + id + "]/*");
			if(list != null){
				user = new User();
			}
			setUser(list, user);
			return user;
		} catch (DocumentException e) {
			e.printStackTrace();
		}
		return null;
	}
	
	//get all users data.
	public List<User> getAllUser(){
		List<User> list = new ArrayList<User>();
		try {
			Document document = XmlUtils.getDocument(path);
			Element rootElement = document.getRootElement();
			//via Xpath expression to select all the nodes.
			List<Element> nodes = rootElement.selectNodes("/users/*");
			for (int i = 0; nodes!=null && i < nodes.size(); i++) {
				User user = new User();
				List<Element> userNodes = nodes.get(i).selectNodes("/users/user[" + (i + 1) +"]/*");
				setUser(userNodes, user);
				list.add(user);
			}
		} catch (DocumentException e) {
			e.printStackTrace();
		}
		return list;
	}

	public Boolean addUser(User user){
		boolean result = false;
		try {
			//get the object of document.
			Document document = XmlUtils.getDocument(path);
			Element root = document.getRootElement();
			//judge the user whether if already exists.
			Node node = root.selectSingleNode("/users/user[id="+ user.getId() +"]");
			if(node != null){
				System.out.println("user is already exists...");
				throw new UserAlreadyExists("user is already exists...");
			}
			//add the user element.
			Element userElement = root.addElement("user");
			userElement.addElement("id").addText(user.getId());
			userElement.addElement("name").addText(user.getName());
			//via add empty character to transfer none String to String type.
			userElement.addElement("age").addText(user.getAge() + "");
			userElement.addElement("currency").addText(user.getCurrency());
			userElement.addElement("quality").addText(user.getQuality() + "");
			userElement.addElement("price").addText(user.getPrice() + "");
			//write to file.
			XmlUtils.write2Document(path, document);
			System.out.println("add user success...");
			result = true;
		}catch (UserAlreadyExists e) {
			throw new RuntimeException(e);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return result;
	}
	
	public Boolean updateUser(User user){
		boolean result = false;
		try {
			//get the Document object
			Document document = XmlUtils.getDocument(path);
			Element root = document.getRootElement();
			//find there whether if exists user which ready update.
			Node node = root.selectSingleNode("/users/user[id="+ user.getId() +"]");
			if(node == null){
				System.out.println("user not exists...");
				throw new UserNotFoundException("the user is not exists which id is " + user.getId());
			}
			List<Element> list = root.selectNodes("/users/user[id=" + user.getId() + "]/*");
			updateUser(list, user);
			//update
			XmlUtils.write2Document(path, document);
			System.out.println("update success...");
			result = true;
		}catch (UserNotFoundException e) {
			throw new RuntimeException(e);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return result;
	}
	
	public Boolean deleteUser(User user){
		boolean result = false;
		try {
			//get the object of document.
			Document document = XmlUtils.getDocument(path);
			Element root = document.getRootElement();
			//In there, you can select what you like option to filter.
			Node node = root.selectSingleNode("/users/user[id="+ user.getId() +"]");
			if(node == null){
				throw new UserNotFoundException("User not found, Please confirm...");
			}
			//remove the user via itself's parent node.
			node.getParent().remove(node);
			//write to file.
			XmlUtils.write2Document(path, document);
			System.out.println("update success...");
			result = true;
		}catch(UserNotFoundException e){
			throw new RuntimeException(e);
		}catch (Exception e) {
			e.printStackTrace();
		}
		return result;
	}
	
	private void setUser(List<Element> list, User user) {
		//via to loop all the options
		for (Iterator iter = list.iterator(); iter.hasNext();) {
			Node node = (Element)iter.next();
			//get the element tag name and content
			String name = node.getName();
			String value = node.getText();
			
			//package data to bean object.
			if("id".equals(name)){
				user.setId(value);
			}
			if("name".equals(name)){
				user.setName(value);
			}
			if("age".equals(name)){
				user.setAge(Integer.parseInt(value));
			}
			if("currency".equals(name)){
				user.setCurrency(value);
			}
			if("quality".equals(name)){
				user.setQuality(Integer.parseInt(value));
			}
			if("price".equals(name)){
				user.setPrice(Double.parseDouble(value));
			}
			System.out.println("@@@ " + name + ": " + value);
		}
	}
	
	private void updateUser(List<Element> list, User user) {
		//via to loop all the options
		for (Iterator iter = list.iterator(); iter.hasNext();) {
			Node node = (Element)iter.next();
			//get the element tag name and content
			String name = node.getName();
			String value = node.getText();
			
			//package data to bean object.
			if("id".equals(name)){
				node.setText(user.getId());
			}
			if("name".equals(name)){
				node.setText(user.getName());
			}
			if("age".equals(name)){
				node.setText(user.getAge() + "");
			}
			if("currency".equals(name)){
				node.setText(user.getCurrency());
			}
			if("quality".equals(name)){
				node.setText(user.getQuality() + "");
			}
			if("price".equals(name)){
				node.setText(user.getPrice() + "");
			}
		}
	}
}

Exception:UserAlreadyExists.java and UserNotFoundException.java

just extends Exception and method.

Utils:XmlUtils.java

package com.djh.michael.utils;
import java.io.FileOutputStream;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class XmlUtils {
	
	public static Document getDocument(String path) throws DocumentException{
		SAXReader reader = new SAXReader();
		Document document = reader.read(path);
		return document;
	}
	
	public static void write2Document(String path, Document document) throws Exception{
		//format the xml file
		OutputFormat format = OutputFormat.createPrettyPrint();
		format.setEncoding("utf-8");
		XMLWriter writer = new XMLWriter(new FileOutputStream(path), format);
		writer.write(document);
		writer.close();
	}
}

XML file(DB):users.xml

<?xml version="1.0" encoding="utf-8"?>
<users> 
  <user> 
    <id>123</id>  
    <name>djh</name>  
    <age>25</age>  
    <currency>USD</currency>  
    <quality>200</quality>  
    <price>12.25</price> 
  </user>  
  <user> 
    <id>456</id>  
    <name>tk</name>  
    <age>24</age>  
    <currency>AUD</currency>  
    <quality>5000</quality>  
    <price>11.06</price> 
  </user>  
</users>

Class of Test:TestCase.java


package com.djh.michael.test;
import java.util.List;
import org.junit.Test;
import com.djh.michael.bean.User;
import com.djh.michael.dao.XmlDao;

public class TestCase {

	@Test
	public void testXmlDaoGetUser(){
		XmlDao xmlDao = new XmlDao();
		User user = xmlDao.getOneUser("123");
		System.out.println(user.toString());
	}
	
	@Test
	public void testGetAllUser(){
		XmlDao xmlDao = new XmlDao();
		List<User> list = xmlDao.getAllUser();
		System.out.println(list);
	}
	
	@Test
	public void testAddUser(){
		User user = new User("789", "lj", 18, "RMB", 6000, 9.5);
		XmlDao xmlDao = new XmlDao();
		boolean result = xmlDao.addUser(user);
		System.out.println(result);
	}
	
	@Test
	public void testUpdate(){
		User user = new User("789", "Niu", 30, "HKD", 6000, 9.5);
		XmlDao xmlDao = new XmlDao();
		boolean result = xmlDao.updateUser(user);
		System.out.println(result);
	}
	
	@Test
	public void testDeleteUser(){
		User user = new User("789", "lj", 18, "RMB", 6000, 9.5);
		XmlDao xmlDao = new XmlDao();
		xmlDao.deleteUser(user);
	}
	
}
Xpath format reference link:
http://www.w3schools.com/xml/xml_xpath.asp



猜你喜欢

转载自blog.csdn.net/djh_happy/article/details/53174212