采用DOM4j操作XML数据库完整实例
来源:互联网 发布:韩国社交软件排名 编辑:程序博客网 时间:2024/05/17 08:05
注意:该博客是在学习《黑马JavaEE12期》时,dom4j部分讲师留下来的作业。我自己做了改进,并且完成了剩余的部分。
1、项目目录结构(标注为红色框的是相关代码)
2、实体Student.java中的代码如下
package cn.itcast.dom4j.homework;/** * 该类的写法参照Effective Java第二版 * 中的Item 2,用于封装实体 */public class Student {private String number;private String name;private String sex;private int age;private Student(Builder builder) {this.number = builder.number;this.name = builder.name;this.sex = builder.sex;this.age = builder.age;}public String getNumber() {return number;}public void setNumber(String number) {this.number = number;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student [number=" + number + ", name=" + name + ", sex=" + sex+ ", age=" + age + "]";}/** * 使用内部类,构造属性 */public static class Builder {private String number = null;private String name = null;private String sex = null;private int age = 0;public Builder() {}public Student build() {return new Student(this);}public Builder number(String number) {this.number = number;return this;}public Builder name(String name) {this.name = name;return this;}public Builder sex(String sex) {this.sex = sex;return this;}public Builder age(int age) {this.age = age;return this;}}}
3、students_copy.xml中的内容
<?xml version="1.0" encoding="utf-8"?><students> <student number="itcast_0001"> <name>rose</name> <age>16</age> <sex>female</sex> </student> <student number="itcast_0002"> <name>jerry</name> <age>16</age> <sex>female</sex> </student> </students>
4、接口StudentDao.java中的代码
package cn.itcast.dom4j.homework;import java.util.List;//Dao ==> Data Access Objectpublic interface StudentDao {// 增void saveStudent(Student stu);// 删void deleteStudent(String number);void deleteStudent(Student stu);// 改void updateStudent(Student stu);// 查Student getStudentByNumber(String number);List<Student> getAllStudent();}
5、实现类StudentDaoImpl.java中的代码
package cn.itcast.dom4j.homework;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.util.ArrayList;import java.util.List;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;public class StudentDaoImpl implements StudentDao {/** * 保存学生 */public void saveStudent(Student stu) {try {Document doc = getDocument();Element root = doc.getRootElement();//4.在根元素上添加student子元素,添加属性Element studentEle = root.addElement("student").addAttribute("number", stu.getNumber());//5. 在student上添加name,age,sex子元素并添加内容studentEle.addElement("name").setText(stu.getName());studentEle.addElement("age").setText(stu.getAge()+"");studentEle.addElement("sex").setText(stu.getSex());save2File(doc);} catch (Exception e) {e.printStackTrace();}}/** * 保存文档到XML文档中 * @param doc * @throws UnsupportedEncodingException * @throws FileNotFoundException * @throws IOException */private void save2File(Document doc) throws UnsupportedEncodingException,FileNotFoundException, IOException {XMLWriter writer = null;try{//1>创建OutputFormatOutputFormat format = OutputFormat.createPrettyPrint();format.setEncoding("utf-8");//2>创建xmlwriterwriter = new XMLWriter(new FileOutputStream("src/students_copy.xml"), format);//3>写入writer.write(doc);}finally{//4>释放资源if(writer != null) {writer.close();}}}/** * 获取文档 * @return * @throws DocumentException */private Document getDocument() throws DocumentException {//1.创建解析器SAXReader reader = new SAXReader();//2.加载xml文件 ==> docDocument doc = reader.read(new File("src/students_copy.xml"));//3.返回文档return doc;}/** * 根据学号删除学生 */public void deleteStudent(String number) {if((number == null) || ("".equals(number.trim()))){throw new RuntimeException("学生学号为空,无法删除操作");}try {Document doc = getDocument();String xpath = "//student[@number='" + number.trim() + "']";Element studentEle = (Element) doc.selectSingleNode(xpath);if(studentEle == null) {throw new RuntimeException("没有学号为" + number + "的学生,无法执行删除操作");}//执行删除操作 booleanisDeleteSuccess = studentEle.getParent().remove(studentEle); System.out.println(isDeleteSuccess?"删除成功":"删除失败"); save2File(doc);} catch (DocumentException e) {e.printStackTrace();} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}/** * 删除学生 */public void deleteStudent(Student stu) {String number = stu.getNumber();deleteStudent(number);}/** * 更新学生 */public void updateStudent(Student stu) {String number = stu.getNumber();String name = stu.getName();int age = stu.getAge();String sex = stu.getSex();String xpath = "//student[@number='" + number + "']";try {Document document = document = getDocument();Element studentEle = (Element) document.selectSingleNode(xpath);//3、修改student元素的子元素的name,age,sex内容studentEle.element("name").setText(name);studentEle.element("age").setText(String.valueOf(age));studentEle.element("sex").setText(sex);save2File(document);} catch (DocumentException e) {e.printStackTrace();} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}/** * 通过学号查询学生 */public Student getStudentByNumber(String number) {if(null == number) {return null;}try {Document doc = getDocument();String xpath = "//student[@number='" + number.trim() + "']";Element studentEle = (Element) doc.selectSingleNode(xpath);String name = studentEle.elementText("name");String age = studentEle.elementText("age");String sex = studentEle.elementText("sex");//当构造器有多个参数时使用创建者创建对象Student student = new Student.Builder().number(number).name(name).sex(sex).age(Integer.valueOf(age)).build();System.out.println(student);return student;} catch (DocumentException e) {e.printStackTrace();}return null;}/** * 查询所有学生 */public List<Student> getAllStudent() {try {Document doc = getDocument();//获取根元素Element rootEle = doc.getRootElement();List<Element> studentsEle = rootEle.elements("student");if(studentsEle == null || studentsEle.size() == 0)throw new RuntimeException("文档中不存在需要查找的元素");List<Student> list = new ArrayList<Student>();for (Element stuEle : studentsEle) {String number = stuEle.attributeValue("number");String name = stuEle.elementText("name");String age = stuEle.elementText("age");String sex = stuEle.elementText("sex");Student student = new Student.Builder().number(number).name(name).sex(sex).age(Integer.valueOf(age.trim())).build();list.add(student);}return list;} catch (DocumentException e) {e.printStackTrace();}return null;}}
6、单元测试类TestDemo.java中的代码(全部测试成功)
package cn.itcast.dom4j.homework;import java.util.List;import org.junit.Before;import org.junit.Test;public class TestDemo {private static StudentDao dao = new StudentDaoImpl();;@Beforepublic void before() {}@Testpublic void testGetAllStudents() {List<Student> list = dao.getAllStudent();System.out.println(list);}@Testpublic void testSaveStudent() {Student stu = new Student.Builder().number("itcast_0004").age(18).name("卡卡罗特").sex("男").build();dao.saveStudent(stu);}@Testpublic void testUpdateStudent() {Student stu = new Student.Builder().number("itcast_0004").age(20).name("库林").sex("男").build();dao.updateStudent(stu);}@Testpublic void testDeleteByNumber() {String number = "itcast_0004";dao.deleteStudent(number);}@Testpublic void testDeleteByModel() {Student stu = new Student.Builder().number("itcast_0003").build();dao.deleteStudent(stu);}}
阅读全文
0 0
- 采用DOM4j操作XML数据库完整实例
- XML操作完整实例
- dom4j对xml比较完整的操作
- 采用Dom4J对XML操作的简单示例
- java分别采用dom,sax,jdom,dom4j操作xml
- 【DRP】采用dom4j完成XML文件导入数据库
- DOM4J操作XML文档的实例
- 采用dom4j解析xml工具
- 采用dom4j解析xml工具
- ASP操作XML文件的完整实例
- ASP操作XML文件的完整实例
- ASP操作XML文件的完整实例
- ASP操作XML文件的完整实例
- ASP操作XML文件的完整实例
- Android 完整地操作数据库--日记本实例
- html5 操作本地数据库 完整实例
- android 完整地操作数据库--日记本实例
- android 完整地操作数据库--日记本实例
- 【mysql】触发器
- 给出进程启动区间计算任意时间点并行进程数量
- Web架构:varnish缓存代理服务器超详细剖析
- Java Socket 简单编程实例
- JavaWeb学习总结(六)——Servlet开发(二)
- 采用DOM4j操作XML数据库完整实例
- UAC 和防火墙的关闭方法
- 汉得 HAP (HAND Application Platform)
- (3)统计二进制数中1的个数
- WAV文件格式分析
- 实现简易Java网络爬虫
- 搭建本地Tomcat服务器及相关配置
- 使用列表控件
- 真机测试-unable to load script 坑