The NoteBook of EricKong

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  611 Posts :: 1 Stories :: 190 Comments :: 0 Trackbacks

 

1.做一个DTO类Student

package com.wepull.student.model;

 

public class Student {

 

       
private int id;

       
private String name;

       
private int age;

 

       
public int getId() {

              
return id;

       }


 

       
public void setId(int 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;

       }


 

}


 

2.做一个查询条件类Cond

package com.wepull.student.model;

 

/**

 * 
@author leno

 * javabean风格的简单查询条件类

 
*/


public class Cond {

 

       
private String colName;

       
private String operation;

       
private String colValue;

       

       
public String getColName() {

              
return colName;

       }


       
public void setColName(String colName) {

              
this.colName = colName;

       }


       
public String getOperation() {

              
return operation;

       }


       
public void setOperation(String operation) {

              
this.operation = operation;

       }


       
public String getColValue() {

              
return colValue;

       }


       
public void setColValue(String colValue) {

              
this.colValue = colValue;

       }


       

       

}


 

3.做一个操作学生对象的DAO的接口

package com.wepull.student.model;

 

import java.util.List;

 

public interface IStudentDAO {

 

       
public void insert(Student stu);

       
public void edit(Student stu);

       
public void del(int id);

       
public Student findById(int id);

       
public int getRecords();

       
public List<Student> findAll();

       
public List<Student> findAll(int page,int pageSize);

       
public List<Student> findAll(List<Cond> cond,int page,int pageSize); 

}


 

4. 做一个操作学生对象的DAO的实现类,该类就是重点

package com.wepull.student.model;

 

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.Iterator;

import java.util.List;

 

import org.dom4j.Document;

import org.dom4j.DocumentException;

import org.dom4j.DocumentHelper;

import org.dom4j.Element;

import org.dom4j.io.OutputFormat;

import org.dom4j.io.SAXReader;

import org.dom4j.io.XMLWriter;

 

/**

 * 
@author leno

 * 
@version 1.0 操作student.xml的DAO类 利用dom4j对存储在xml格式文件上的数据进行CRUD

 
*/


public class StudentDAO implements IStudentDAO {

 

       
private String xmlPath = "student.xml";

       
private Document doc;

       
{

              init();

       }


 

       
public StudentDAO() {

       }


 

       
public StudentDAO(String xmlPath) {

              
this.xmlPath = xmlPath;

       }


 

       
/**

        * 初始化工作,xml文件存在而读取,

        * 不存在则按照一定格式在当前工程下创建

        
*/


       
public void init() {

              File file 
= new File(xmlPath);

              
if (file.exists()) {

                     SAXReader reader 
= new SAXReader();

                     
try {

                            doc 
= reader.read(file);

                     }
 catch (DocumentException e) {

                            
// TODO Auto-generated catch block

                            e.printStackTrace();

                     }


              }
 else {

                     doc 
= DocumentHelper.createDocument();

                     
// 使用addDocType()方法添加文档类型说明

                     doc.addDocType(
"students"null"student.dtd");

                     Element root 
= doc.addElement("students");

                     root.addComment(
"student's information!");

                     overRideXml();

              }


       }


 

       
public void del(int id) {

              Element element 
= findElementById(id);

              
if (element != null{

                     doc.getRootElement().remove(element);

                     overRideXml();

              }


 

       }


 

       
public void insert(Student stu) {

              
int currId = getMaxId() + 1;

              Element root 
= doc.getRootElement();

              Element student 
= root.addElement("student");

              student.addAttribute(
"id", String.valueOf(currId));

              Element name 
= student.addElement("name");

              name.setText(stu.getName());

              Element age 
= student.addElement("age");

              age.setText(String.valueOf(stu.getAge()));

              overRideXml();

       }


 

       
public void edit(Student stu) {

              
int id = stu.getId();

              Element element 
= findElementById(id);

              
if (element != null{

                     element.element(
"name").setText(stu.getName());

                     element.element(
"age").setText(String.valueOf(stu.getAge()));

                     overRideXml();

              }


       }


 

       @SuppressWarnings(
"unchecked")

       
public List<Student> findAll() {

              List
<Student> list = new ArrayList<Student>();

              Element root 
= doc.getRootElement();

              Iterator
<Element> it = root.elementIterator("student");

              
while (it.hasNext()) {

                     Element element 
= it.next();

                     Student stu 
= new Student();

                     stu.setId(Integer.parseInt(element.attributeValue(
"id")));

                     stu.setName(element.elementText(
"name"));

                     stu.setAge(Integer.parseInt(element.elementText(
"age")));

                     list.add(stu);

              }


              
return list;

       }


 

       @SuppressWarnings(
"unchecked")

       
public List<Student> findAll(int page, int pageSize) {

              List
<Student> list = new ArrayList<Student>();

              Element root 
= doc.getRootElement();

              List
<Element> allList = root.elements();

              
int size = allList.size();

              
int maxPage = (size + pageSize - 1/ pageSize;

              
if (size == 0 || page < 1 || page > maxPage) {

                     
return list;

              }


              
int start = (page - 1* pageSize;

              
int end = start + pageSize;

              
if (end > size) {

                     end 
= allList.size();

              }


              List
<Element> eleList = allList.subList(start, end);

              Iterator
<Element> it = eleList.iterator();

              
while (it.hasNext()) {

                     Element element 
= it.next();

                     Student stu 
= new Student();

                     stu.setId(Integer.parseInt(element.attributeValue(
"id")));

                     stu.setName(element.elementText(
"name"));

                     stu.setAge(Integer.parseInt(element.elementText(
"age")));

                     list.add(stu);

              }


              
return list;

       }


 

       
/**

        * 分页并且按照条件查询学生数据(有待加强和优化)

        
*/


       @SuppressWarnings(
"unchecked")

       
public List<Student> findAll(List<Cond> conds, int page, int pageSize) {

              List
<Student> list = new ArrayList<Student>();

              Element root 
= doc.getRootElement();

              List
<Element> allList = new ArrayList<Element>();

              Iterator
<Element> allIt = root.elementIterator();

              
while (allIt.hasNext()) {

                     Element element 
= allIt.next();

                     String id 
= element.attributeValue("id");

                     String name 
= element.elementText("name");

                     String age 
= element.elementText("age");

                     
for (int i = 0; i < conds.size(); i++{

                            Cond cond 
= conds.get(i);

                            String colName 
= cond.getColName();

                            String operation 
= cond.getOperation();

                            String colValue 
= cond.getColValue();

                            
if ("id".equals(colName)) {

                                   
if (operation.equals("=")) {

                                          
if (!id.equals(colValue)) {

                                                 
break;

                                          }


                                   }


                            }
 else if ("name".equals(colName)) {

                                   
if (operation.equals("=")) {

                                          
if (!name.equals(colValue)) {

                                                 
break;

                                          }


                                   }
 else if (operation.equals("like")) {

                                          
if (!name.contains(colValue)) {

                                                 
break;

                                          }


                                   }


                            }
 else if ("age".equals(colName)) {

                                   
if (operation.equals("=")) {

                                          
if (!age.equals(colValue)) {

                                                 
break;

                                          }


                                   }


                            }


                     }


                     allList.add(element);

              }


              
int size = allList.size();

              
int maxPage = (size + pageSize - 1/ pageSize;

              
if (size == 0 || page < 1 || page > maxPage) {

                     
return list;

              }


              
int start = (page - 1* pageSize;

              
int end = start + pageSize;

              
if (end > size) {

                     end 
= allList.size();

              }


              List
<Element> eleList = allList.subList(start, end);

              Iterator
<Element> it = eleList.iterator();

              
while (it.hasNext()) {

                     Element element 
= it.next();

                     Student stu 
= new Student();

                     stu.setId(Integer.parseInt(element.attributeValue(
"id")));

                     stu.setName(element.elementText(
"name"));

                     stu.setAge(Integer.parseInt(element.elementText(
"age")));

                     list.add(stu);

              }


              
return list;

       }


 

       
public Student findById(int id) {

              Student stu 
= null;

              Element element 
= findElementById(id);

              
if (element != null{

                     stu 
= new Student();

                     stu.setId(id);

                     stu.setName(element.elementText(
"name"));

                     stu.setAge(Integer.parseInt(element.elementText(
"age")));

              }


              
return stu;

       }


 

       
public int getRecords() {

              
return doc.getRootElement().elements().size();

       }


 

       @SuppressWarnings(
"unchecked")

       
private Element findElementById(int id) {

              Iterator
<Element> it = doc.getRootElement().elementIterator("student");

              
while (it.hasNext()) {

                     Element element 
= it.next();

                     
if (String.valueOf(id).equals(element.attributeValue("id"))) {

                            
return element;

                     }


              }


              
return null;

       }


 

       @SuppressWarnings(
"unchecked")

       
private int getMaxId() {

              
int maxId = 0;

              Element root 
= doc.getRootElement();

              Iterator
<Element> it = root.elementIterator("student");

              
while (it.hasNext()) {

                     Element element 
= (Element) it.next();

                     String id 
= element.attributeValue("id");

                     
if (maxId < Integer.parseInt(id)) {

                            maxId 
= Integer.parseInt(id);

                     }


              }


              System.out.println(
"maxId" + maxId);

              
return maxId;

       }


 

       
/**

        * 将修改后的Document对象写回到xml文件中

        
*/


       
private void overRideXml() {

              
/** 格式化输出,类型IE浏览一样 */

              XMLWriter writer 
= null;

              
try {

                     writer 
= new XMLWriter(new FileOutputStream(xmlPath), OutputFormat

                                   .createPrettyPrint());

                     writer.write(doc);

                     writer.close();

              }
 catch (UnsupportedEncodingException e) {

                     
// TODO Auto-generated catch block

                     e.printStackTrace();

              }
 catch (FileNotFoundException e) {

                     
// TODO Auto-generated catch block

                     e.printStackTrace();

              }
 catch (IOException e) {

                     
// TODO Auto-generated catch block

                     e.printStackTrace();

              }


       }


 

       
public static void main(String[] args) {

              IStudentDAO dao 
= new StudentDAO();

              
// System.out.println(dao.getRecords());

              
// for (int i = 0; i < 40; i++) {

              
// Student stu = new Student();

              
// //stu.setId(2);

              
// stu.setName("www");

              
// stu.setAge(233);

              
// dao.insert(stu);

              
// }

              List
<Cond> conds = new ArrayList<Cond>();

              
for (int i = 0; i < 1; i++{

                     Cond cond 
= new Cond();

                     cond.setColName(
"name");

                     cond.setOperation(
"like");

                     cond.setColValue(
"1");

                     conds.add(cond);

              }


              List
<Student> list = dao.findAll(conds, 120);

              Iterator
<Student> it = list.iterator();

              
while (it.hasNext()) {

                     Student stu 
= it.next();

                     System.out.println(stu.getId() 
+ " " + stu.getName());

              }


       }


 

}


 

5. 将如下student.dtd文件放在当前工程目录下

<!ELEMENT students (student*)>

<!ELEMENT student (name,age)>

<!ATTLIST student id CDATA #IMPLIED>

<!ELEMENT name (#PCDATA)>

<!ELEMENT age (#PCDATA)>

 

posted on 2012-02-23 17:57 Eric_jiang 阅读(411) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: