橘子味的心
标题:Java数据访问对象模式

数据访问对象模式或DAO模式用于将低级数据访问API或操作与高级业务服务分离。 以下是数据访问对象模式的参与者。

  • 数据访问对象接口 - 此接口定义要对模型对象执行的标准操作。
  • 数据访问对象具体类 - 此类实现上述接口。 这个类负责从数据源获取数据,数据源可以是数据库/xml或任何其他存储机制。
  • 模型对象或值对象 - 此对象是简单的POJO,包含用于存储使用DAO类检索的数据的get/set方法。

实现实例

在这个将创建一个作为ModelValue对象的Student对象。 StudentDao是数据访问对象接口。 StudentDaoImpl是实现数据访问对象接口的具体类。 DaoPatternDemo这是一个演示类,将使用StudentDao演示使用数据访问对象模式。

数据访问对象模式示例的结构如下图所示 -

第1步

创建值对象,其代码如下 -

Student.java

  1. public class Student {
  2. private String name;
  3. private int rollNo;
  4.  
  5. Student(String name, int rollNo){
  6. this.name = name;
  7. this.rollNo = rollNo;
  8. }
  9.  
  10. public String getName() {
  11. return name;
  12. }
  13.  
  14. public void setName(String name) {
  15. this.name = name;
  16. }
  17.  
  18. public int getRollNo() {
  19. return rollNo;
  20. }
  21.  
  22. public void setRollNo(int rollNo) {
  23. this.rollNo = rollNo;
  24. }
  25. }
  26. Java

第2步

创建数据访问对象接口,其代码如下 -

StudentDao.java

  1. import java.util.List;
  2.  
  3. public interface StudentDao {
  4. public List<Student> getAllStudents();
  5. public Student getStudent(int rollNo);
  6. public void updateStudent(Student student);
  7. public void deleteStudent(Student student);
  8. }
  9. Java

第3步

创建实现上面的接口的具体类,其代码如下 -

StudentDaoImpl.java

  1. import java.util.ArrayList;
  2. import java.util.List;
  3.  
  4. public class StudentDaoImpl implements StudentDao {
  5.  
  6. //list is working as a database
  7. List<Student> students;
  8.  
  9. public StudentDaoImpl(){
  10. students = new ArrayList<Student>();
  11. Student student1 = new Student("Robert",0);
  12. Student student2 = new Student("John",1);
  13. students.add(student1);
  14. students.add(student2);
  15. }
  16. @Override
  17. public void deleteStudent(Student student) {
  18. students.remove(student.getRollNo());
  19. System.out.println("Student: Roll No " + student.getRollNo() + ", deleted from database");
  20. }
  21.  
  22. //retrive list of students from the database
  23. @Override
  24. public List<Student> getAllStudents() {
  25. return students;
  26. }
  27.  
  28. @Override
  29. public Student getStudent(int rollNo) {
  30. return students.get(rollNo);
  31. }
  32.  
  33. @Override
  34. public void updateStudent(Student student) {
  35. students.get(student.getRollNo()).setName(student.getName());
  36. System.out.println("Student: Roll No " + student.getRollNo() + ", updated in the database");
  37. }
  38. }
  39. Java

第4步

使用StudentDao演示数据访问对象模式的使用。
DaoPatternDemo.java

  1. public class DaoPatternDemo {
  2. public static void main(String[] args) {
  3. StudentDao studentDao = new StudentDaoImpl();
  4.  
  5. //print all students
  6. for (Student student : studentDao.getAllStudents()) {
  7. System.out.println("Student: [RollNo : " + student.getRollNo() + ", Name : " + student.getName() + " ]");
  8. }
  9.  
  10.  
  11. //update student
  12. Student student =studentDao.getAllStudents().get(0);
  13. student.setName("Michael");
  14. studentDao.updateStudent(student);
  15.  
  16. //get the student
  17. studentDao.getStudent(0);
  18. System.out.println("Student: [RollNo : " + student.getRollNo() + ", Name : " + student.getName() + " ]");
  19. }
  20. }
  21. Java

第5步

验证输出,执行上面的代码得到以下结果 -

  1. Student: [RollNo : 0, Name : Robert ]
  2. Student: [RollNo : 1, Name : John ]
  3. Student: Roll No 0, updated in the database
  4. Student: [RollNo : 0, Name : Michael ]
  5. Java