Java数据访问对象模式

x33g5p2x  于2021-09-28 转载在 Java  
字(2.4k)|赞(0)|评价(0)|浏览(396)

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 类检索到的数据。

创建数值对象。

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

创建数据访问对象接口。

  1. public interface StudentDao {
  2. public List<Student> getAllStudents();
  3. public Student getStudent(int rollNo);
  4. public void updateStudent(Student student);
  5. public void deleteStudent(Student student);
  6. }

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

  1. public class StudentDaoImpl implements StudentDao {
  2. //列表是当作一个数据库
  3. List<Student> students;
  4. public StudentDaoImpl(){
  5. students = new ArrayList<Student>();
  6. Student student1 = new Student("Robert",0);
  7. Student student2 = new Student("John",1);
  8. students.add(student1);
  9. students.add(student2);
  10. }
  11. @Override
  12. public void deleteStudent(Student student) {
  13. students.remove(student.getRollNo());
  14. System.out.println("Student: Roll No " + student.getRollNo()
  15. +", deleted from database");
  16. }
  17. //从数据库中检索学生名单
  18. @Override
  19. public List<Student> getAllStudents() {
  20. return students;
  21. }
  22. @Override
  23. public Student getStudent(int rollNo) {
  24. return students.get(rollNo);
  25. }
  26. @Override
  27. public void updateStudent(Student student) {
  28. students.get(student.getRollNo()).setName(student.getName());
  29. System.out.println("Student: Roll No " + student.getRollNo()
  30. +", updated in the database");
  31. }
  32. }

测试

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

Student: [RollNo : 0, Name : Robert ]
Student: [RollNo : 1, Name : John ]

Student: Roll No 0, updated in the database
Student: [RollNo : 0, Name : Michael ]

相关文章

最新文章

更多