课程表

设计模式课程

工具箱
速查手册

数据访问对象模式

当前位置:免费教程 » Java相关 » 设计模式

数据访问对象模式(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 来演示数据访问对象模式的用法。

数据访问对象模式的 UML 图

步骤 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. }

步骤 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.  

步骤 3

创建实现了上述接口的实体类。

StudentDaoImpl.java

  1. import java.util.ArrayList;
  2. import java.util.List;
  3.  
  4. public class StudentDaoImpl implements StudentDao {
  5. //列表是当作一个数据库
  6. List<Student> students;
  7.  
  8. public StudentDaoImpl(){
  9. students = new ArrayList<Student>();
  10. Student student1 = new Student("Robert",0);
  11. Student student2 = new Student("John",1);
  12. students.add(student1);
  13. students.add(student2);
  14. }
  15. @Override
  16. public void deleteStudent(Student student) {
  17. students.remove(student.getRollNo());
  18. System.out.println("Student: Roll No " + student.getRollNo()
  19. +", deleted from database");
  20. }
  21.  
  22. //从数据库中检索学生名单
  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()
  37. +", updated in the database");
  38. }
  39. }

步骤 4

使用 StudentDao 来演示数据访问对象模式的用法。

CompositeEntityPatternDemo.java

  1. public class DaoPatternDemo {
  2. public static void main(String[] args) {
  3. StudentDao studentDao = new StudentDaoImpl();
  4.  
  5. //输出所有的学生
  6. for (Student student : studentDao.getAllStudents()) {
  7. System.out.println("Student: [RollNo : "
  8. +student.getRollNo()+", Name : "+student.getName()+" ]");
  9. }
  10.  
  11.  
  12. //更新学生
  13. Student student =studentDao.getAllStudents().get(0);
  14. student.setName("Michael");
  15. studentDao.updateStudent(student);
  16.  
  17. //获取学生
  18. studentDao.getStudent(0);
  19. System.out.println("Student: [RollNo : "
  20. +student.getRollNo()+", Name : "+student.getName()+" ]");
  21. }
  22. }

步骤 5

验证输出。

Student: [RollNo : 0, Name : Robert ]
Student: [RollNo : 1, Name : John ]
Student: Roll No 0, updated in the database
Student: [RollNo : 0, Name : Michael ]
转载本站内容时,请务必注明来自W3xue,违者必究。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号