modèle d'objet d'accès aux données


Le modèle d'objet d'accès aux données ou modèle DAO est utilisé pour séparer les API ou opérations d'accès aux données de bas niveau des services métier de haut niveau. Voici les participants du modèle Data Access Object.

  • Interface d'objet d'accès aux données - Cette interface définit les opérations standard à effectuer sur un objet de modèle.

  • Classe concrète d'objet d'accès aux données - Cette classe implémente l'interface ci-dessus. Cette classe est chargée d'obtenir les données de la source de données, qui peut être une base de données, du XML ou un autre mécanisme de stockage.

  • Objet modèle/objet valeur - Cet objet est un simple POJO qui contient des méthodes get/set pour stocker des données à l'aide de la classe DAO Données récupérées.

Implémentation

Nous allons créer un objet Étudiant qui est soit un objet modèle, soit un objet numérique. StudentDao est l'interface de l'objet d'accès aux données. StudentDaoImpl est une classe d'entité qui implémente l'interface objet d'accès aux données. DaoPatternDemo, notre classe de démonstration utilise StudentDao pour démontrer l'utilisation du modèle d'objet d'accès aux données.

dao_pattern_uml_diagram.jpg

Étape 1

Créez un objet numérique.

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;
   }
}

Étape 2

Créez l'interface de l'objet d'accès aux données.

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

Étape 3

Créez une classe d'entité qui implémente l'interface ci-dessus.

StudentDaoImpl.java

import java.util.ArrayList;
import java.util.List;

public class StudentDaoImpl implements StudentDao {
	
   //列表是当作一个数据库
   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");
   }

   //从数据库中检索学生名单
   @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");
   }
}

Étape 4

Utilisez StudentDao pour démontrer l'utilisation du modèle d'objet d'accès aux données.

CompositeEntityPatternDemo.java

public class DaoPatternDemo {
   public static void main(String[] args) {
      StudentDao studentDao = new StudentDaoImpl();

      //输出所有的学生
      for (Student student : studentDao.getAllStudents()) {
         System.out.println("Student: [RollNo : "
            +student.getRollNo()+", Name : "+student.getName()+" ]");
      }


      //更新学生
      Student student =studentDao.getAllStudents().get(0);
      student.setName("Michael");
      studentDao.updateStudent(student);

      //获取学生
      studentDao.getStudent(0);
      System.out.println("Student: [RollNo : "
         +student.getRollNo()+", Name : "+student.getName()+" ]");		
   }
}

Étape 5

Vérifiez la sortie.

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