Java数据访问对象模式

来源:互联网 发布:web前端实战项目源码 编辑:程序博客网 时间:2024/05/15 20:13

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

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

实现实例

在这个将创建一个作为ModelValue对象的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;   }}
Java

第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);}
Java

第3步

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

StudentDaoImpl.java

import java.util.ArrayList;import java.util.List;public class StudentDaoImpl implements StudentDao {   //list is working as a database   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");   }   //retrive list of students from the 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");   }}
Java

第4步

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

public class DaoPatternDemo {   public static void main(String[] args) {      StudentDao studentDao = new StudentDaoImpl();      //print all students      for (Student student : studentDao.getAllStudents()) {         System.out.println("Student: [RollNo : " + student.getRollNo() + ", Name : " + student.getName() + " ]");      }      //update student      Student student =studentDao.getAllStudents().get(0);      student.setName("Michael");      studentDao.updateStudent(student);      //get the student      studentDao.getStudent(0);      System.out.println("Student: [RollNo : " + student.getRollNo() + ", Name : " + student.getName() + " ]");           }}
Java

第5步

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

Student: [RollNo : 0, Name : Robert ]Student: [RollNo : 1, Name : John ]Student: Roll No 0, updated in the databaseStudent: [RollNo : 0, Name : Michael ]