數據訪問對像模式
數據訪問對像模式(Data Access Object Pattern)或DAO 模式用於把低級的數據訪問API 或操作從高級的業務服務中分離出來。 以下是數據訪問對像模式的參與者。
- 數據訪問對象接口(Data Access Object Interface) -該接口定義了在一個模型對像上要執行的標準操作。
- 數據訪問對象實體類(Data Access Object concrete class) -該類實現了上述的接口。該類負責從數據源獲取數據,數據源可以是數據庫,也可以是xml,或者是其他的存儲機制。
- 模型對象/數值對象(Model Object/Value Object) -該對像是簡單的POJO,包含了get/set方法來存儲通過使用DAO類檢索到的數據。
實現
我們將創建一個作為模型對像或數值對象的Student對象。StudentDao是數據訪問對象接口。 StudentDaoImpl是實現了數據訪問對象接口的實體類。 DaoPatternDemo,我們的演示類使用StudentDao來演示數據訪問對像模式的用法。
步驟1
創建數值對象。
Student.java
public class Student { private String name; private int rollNo; Student(String name, int rollNo){ this.name = name; this.rollNo = rollNo; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getRollNo() { return rollNo; } public void setRollNo(int rollNo) { this.rollNo = rollNo; } }
步驟2
創建數據訪問對象接口。
StudentDao.java
import java.util.List; public interface StudentDao { public List<Student> getAllStudents(); public Student getStudent(int rollNo); public void updateStudent(Student student); public void deleteStudent(Student student); }
步驟3
創建實現了上述接口的實體類。
StudentDaoImpl.java
import java.util.ArrayList; import java.util.List; public class StudentDaoImpl implements StudentDao { //列表是當作一個數據庫List<Student> students; public StudentDaoImpl(){ students = new ArrayList<Student>(); Student student1 = new Student("Robert",0); Student student2 = new Student("John",1); students.add(student1); students.add(student2); } @Override public void deleteStudent(Student student) { students.remove(student.getRollNo()); System.out.println("Student: Roll No " + student.getRollNo() +", deleted from database"); } //從數據庫中檢索學生名單@Override public List<Student> getAllStudents() { return students; } @Override public Student getStudent(int rollNo) { return students.get(rollNo); } @Override public void updateStudent(Student student) { students.get(student.getRollNo()).setName(student.getName()); System.out.println("Student: Roll No " + student.getRollNo() +", updated in the database"); } }
步驟4
使用StudentDao來演示數據訪問對像模式的用法。
CompositeEntityPatternDemo.java
public class DaoPatternDemo { public static void main(String[] args) { StudentDao studentDao = new StudentDaoImpl(); //輸出所有的學生for (Student student : studentDao.getAllStudents()) { System.out.println("Student: [RollNo : " +student.getRollNo()+", Name : "+student.getName()+" ]"); } //更新學生Student student =studentDao.getAllStudents().get(0); student.setName("Michael"); studentDao.updateStudent(student); //獲取學生studentDao.getStudent(0); System.out.println("Student: [RollNo : " +student.getRollNo()+", Name : "+student.getName()+" ]"); } }
步驟5
驗證輸出。
Student: [RollNo : 0, Name : Robert ] Student: [RollNo : 1, Name : John ] Student: Roll No 0, updated in the database Student: [RollNo : 0, Name : Michael ]