Design Patterns - Data Access Object

design-patterns

// Design Patterns - Structural - Data Access Object:

Data Access Object Pattern or DAO pattern is used to separate low level data 
accessing API or operations from high level business services. Following are 
the participants in Data Access Object Pattern.

1. Data Access Object Interface - This interface defines the standard operations 
   to be performed on a model object(s).
2. Data Access Object concrete class - This class implements above interface. 
   This class is responsible to get data from a data source which can be 
   database / xml or any other storage mechanism.
3. Model Object or Value Object - This object is simple POJO containing get/set 
   methods to store data retrieved using DAO class.

We are going to create a Student object acting as a Model or Value Object.  
StudentDao is Data Access Object Interface.StudentDaoImpl is concrete class 
implementing Data Access Object Interface.

// Step 1: Create Value Object.
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;
   }
}

// Step 2: Create Data Access Object Interface.
public interface StudentDao {
   public List<Student> getAllStudents();
   public Student getStudent(int rollNo);
   public void updateStudent(Student student);
   public void deleteStudent(Student student);
}

// Step 3: Create concrete class implementing above interface.
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);        
   }

   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
   public List<Student> getAllStudents() {
      return students;
   }

   public Student getStudent(int rollNo) {
      return students.get(rollNo);
   }

   public void updateStudent(Student student) {
      students.get(student.getRollNo()).setName(student.getName());
      System.out.println("Student: Roll No " + student.getRollNo() + ", updated in the database");
   }
}

// Step 4: Use the StudentDao to demonstrate Data Access Object pattern usage.
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() + " ]");
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License