数据访问对象模式
数据访问对象模式(Data Access Object Pattern)或 DAO 模式用于把低级的数据访问 API 或操作从高级的业务服务中分离出来。以下是数据访问对象模式的参与者。
- 数据访问对象接口(Data Access Object Interface) - 该接口定义了在一个模型对象上要执行的标准操作。
- 数据访问对象实体类(Data Access Object concrete class) - 该类实现了上述的接口。该类负责从数据源获取数据,数据源可以是数据库,也可以是 xml,或者是其他的存储机制。3
- 模型对象/数值对象(Model Object/Value Object) - 该对象是简单的 POJO,包含了 get/set 方法来存储通过使用 DAO 类检索到的数据。
1、Studen.java
package dataAccessObject.model; /** * student model * @author kangkang.tao * Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO。 * 它也可以带有逻辑,在数据变化时更新控制器 */ public class Student { private int rollNo; private String name; public Student() { } public Student(int rollNo, String name) { this.rollNo = rollNo; this.name = name; } public Student(String name) { this.name = name; } public int getRollNo() { return rollNo; } public void setRollNo(int rollNo) { this.rollNo = rollNo; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Student [name=" + name + ", rollNo=" + rollNo + "]"; } }
2、StudentDao.java
package dataAccessObject.dao; import java.util.List; import dataAccessObject.model.Student; /** * @author kangkang.tao * 创建数据访问对象接口。 * StudentDao.java * 该接口定义了在一个模型对象上要执行的标准操作。 */ public interface StudentDao { public List<Student> getAll(); public Student getByRollNO(int rollNO); public void delete(int rollNO); public void update(Student student); public void add(Student student); }
3、StudentDaoImpl.java
package dataAccessObject.daoImpl; import java.util.ArrayList; import java.util.List; import dataAccessObject.dao.StudentDao; import dataAccessObject.model.Student; /** * 创建实现了上述接口的实体类。 * StudentDaoImpl.java * @author kangkang.tao * 该类实现了上述的接口。该类负责从数据源获取数据, * 数据源可以是数据库,也可以是 xml,或者是其他的存储机制。 */ public class StudentDaoImpl implements StudentDao{ List<Student> students; // 实例化几个学生对象 public StudentDaoImpl() { students = new ArrayList<Student>(); students.add(new Student(0, "kangkang")); students.add(new Student(1, "klan")); students.add(new Student(2, "tom")); } public void add(Student student) { students.add(student); } public void delete(int rollNO) { students.remove(rollNO); System.out.println("delete rollNO:" +rollNO); List<Student> students = getAll(); System.out.println("after delete:"); for (Student student : students) { System.out.println(student); } } public List<Student> getAll() { return students; } public Student getByRollNO(int rollNO) { return students.get(rollNO); } public void update(Student student) { Student stu = students.get(student.getRollNo()); stu.setName(student.getName()); System.out.println("update student's rollNO:" +student.getRollNo()); System.out.println(stu); } }
4.Demo.java
package dataAccessObject.demo; import org.junit.Test; import dataAccessObject.dao.StudentDao; import dataAccessObject.daoImpl.StudentDaoImpl; import dataAccessObject.model.Student; public class Demo { private StudentDao studentDao = new StudentDaoImpl(); @Test public void getAll() { for (Student student : studentDao.getAll()) { System.out.println(student); } } @Test public void getByRollNO() { System.out.println(studentDao.getByRollNO(1)); } @Test public void delete() { studentDao.delete(0); } @Test public void update() { Student student =studentDao.getByRollNO(1); student.setName("update"); studentDao.update(student); } }