package com.dao.impl;
import java.util.ArrayList;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.Node;
import com.dao.UserDao;
import com.domain.User;
import com.exception.UserNotExistsException;
import com.utils.XMLUtils;
public class UserDaoXmlImpl implements UserDao {
private static String savePath ;
static
{
savePath = XMLUtils.class.getClassLoader().getResource("User.xml").getPath();
}
/**
* 添加用户
* @param user 用户
*/
public void add(User user)
{
try
{
Document document = XMLUtils.getDocument();
Element root = document.getRootElement();
Element userElement = root.addElement("user")
.addAttribute("id", user.getId().toString());
Element nameElement = userElement.addElement("name");
nameElement.setText(user.getName());
Element ageElement = userElement.addElement("age");
ageElement.setText(user.getAge().toString());
Element sexElement = userElement.addElement("sex");
sexElement.setText(user.getSex());
XMLUtils.write(document, savePath);
// System.out.println(savePath);
}
catch (Exception e)
{
throw new RuntimeException(e);
}
}
/**
* 更新用户
* @param user 用户
*/
public void update(User user)
{
try
{
Document document = XMLUtils.getDocument();
Element root = document.getRootElement();
Element userElement = (Element) root.selectSingleNode("//user[@id='"+user.getId().toString()+"']");
if(userElement==null)
{
throw new RuntimeException( new UserNotExistsException("用户不存在") );
}
Element nameElement = (Element) userElement.selectSingleNode("name");
nameElement.setText(user.getName());
Element ageElement = (Element) userElement.selectSingleNode("age");
ageElement.setText(user.getAge().toString());
Element sexElement = (Element) userElement.selectSingleNode("sex");
sexElement.setText(user.getSex());
XMLUtils.write(document, savePath);
}
catch (Exception e)
{
throw new RuntimeException(e);
}
}
/* (non-Javadoc)
* @see com.dao.impl.UserDao#delete(java.lang.Integer)
*/
public void delete(Integer id)
{
try
{
Document document = XMLUtils.getDocument();
Element root = document.getRootElement();
Element userElement = (Element) root.selectSingleNode("//user[@id='"+ id.toString()+"']");
if(userElement==null)
{
throw new RuntimeException( new UserNotExistsException("用户不存在") );
}
root.remove(userElement);
XMLUtils.write(document, savePath);
}
catch (Exception e)
{
throw new RuntimeException(e);
}
}
/* (non-Javadoc)
* @see com.dao.impl.UserDao#findById(java.lang.Integer)
*/
public User findById(Integer id)
{
try
{
Document document = XMLUtils.getDocument();
Element root = document.getRootElement();
Element userElement = (Element) root.selectSingleNode("//user[@id='"+id.toString()+"']");
User user = null;
if(userElement==null)
{
return user;
}
user = new User();
/*
* 属性的获取:
* 1.先获取属性对象: userElement.attribute("id")
* 2.获取属性值:userElement.attribute("id").getValue();
*
*/
String ids = userElement.attribute("id").getValue();
user.setId(Integer.valueOf( ids ));
Element nameElement = (Element) userElement.selectSingleNode("name");
user.setName(nameElement.getTextTrim());
Element ageElement = (Element) userElement.selectSingleNode("age");
user.setAge(Integer.valueOf( ageElement.getTextTrim().toString() ));
Element sexElement = (Element) userElement.selectSingleNode("sex");
user.setSex(sexElement.getTextTrim());
return user;
}
catch (Exception e)
{
throw new RuntimeException(e);
}
}
/* (non-Javadoc)
* @see com.dao.impl.UserDao#findByName(java.lang.String)
*/
public User findByName(String name)
{
try
{
Document document = XMLUtils.getDocument();
Element root = document.getRootElement();
List<Node> nodeList = root.selectNodes("//user//name");
Element nameElement = null;
for(Node node : nodeList)
{
String text = node.getText().trim();
if(name.equals(text))
{
nameElement = (Element) node;
break;
}
}
User user = null;
if(nameElement==null)
{
return user;
}
user = new User();
Element userElement = nameElement.getParent();
/*
* 属性的获取:
* 1.先获取属性对象: userElement.attribute("id")
* 2.获取属性值:userElement.attribute("id").getValue();
*
*/
String ids = userElement.attribute("id").getValue();
user.setId(Integer.valueOf( ids ));
nameElement = (Element) userElement.selectSingleNode("name");
user.setName(nameElement.getTextTrim());
Element ageElement = (Element) userElement.selectSingleNode("age");
user.setAge(Integer.valueOf( ageElement.getTextTrim().toString() ));
Element sexElement = (Element) userElement.selectSingleNode("sex");
user.setSex(sexElement.getTextTrim());
return user;
}
catch (Exception e)
{
throw new RuntimeException(e);
}
}
/* (non-Javadoc)
* @see com.dao.impl.UserDao#getAll()
*/
public List<User> getAll()
{
try
{
Document document = XMLUtils.getDocument();
Element root = document.getRootElement();
List<Node> nodeList = root.selectNodes("//user//name");
if(nodeList==null)
{
return null;
}
List<User> users = new ArrayList();
for(Node node : nodeList)
{
Element nameElement = (Element) node;
User user = new User();
Element userElement = nameElement.getParent();
/*
* 属性的获取:
* 1.先获取属性对象: userElement.attribute("id")
* 2.获取属性值:userElement.attribute("id").getValue();
*
*/
String ids = userElement.attribute("id").getValue();
user.setId(Integer.valueOf( ids ));
nameElement = (Element) userElement.selectSingleNode("name");
user.setName(nameElement.getTextTrim());
Element ageElement = (Element) userElement.selectSingleNode("age");
user.setAge(Integer.valueOf( ageElement.getTextTrim().toString() ));
Element sexElement = (Element) userElement.selectSingleNode("sex");
user.setSex(sexElement.getTextTrim());
users.add(user);
}
return users;
}
catch (Exception e)
{
throw new RuntimeException(e);
}
}
public List<User> query(int start, int seze) {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see com.dao.impl.UserDao#query(int, int)
*/
}
三。测试类
import java.util.List;
import org.junit.Test;
import com.dao.UserDao;
import com.dao.impl.UserDaoXmlImpl;
import com.domain.User;
public class UserDaoTest {
@Test
public void testAdd()
{
UserDao dao = new UserDaoXmlImpl();
for(int i=101;i<121;i++)
{
User user = new User();
user.setId(i);
user.setName("王五"+i);
user.setAge(18+i-127);
user.setSex("男");
dao.add(user);
}
}
@Test
public void testUpdate()
{
UserDao dao = new UserDaoXmlImpl();
User user = new User();
user.setId(100);
user.setName("吴二");
user.setAge(28);
user.setSex("男");
dao.update(user);
}
@Test
public void testDelete()
{
UserDao dao = new UserDaoXmlImpl();
dao.delete(1);
}
@Test
public void testFindById()
{
UserDao dao = new UserDaoXmlImpl();
User user = dao.findById(100);
System.out.println(user.getName());
}
@Test
public void testFindByName()
{
UserDao dao = new UserDaoXmlImpl();
User user = dao.findByName("吴二");
System.out.println(user.getName());
}
@Test
public void testGetAll()
{
UserDao dao = new UserDaoXmlImpl();
List<User> users = dao.getAll();
for(User user:users)
{
System.out.println(user.getName());
}
}
}