数据访问对象模式(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 来演示数据访问对象模式的用法。
步骤 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;
}
}
步骤 2
创建数据访问对象接口。
studentdao.java
import java.util.list;
public interface studentdao {
public list
public student getstudent(int rollno);
public void updatestudent(student student);
public void deletestudent(student student);
}
步骤 3
创建实现了上述接口的实体类。
studentdaoimpl.java
import java.util.arraylist;
import java.util.list;
public class studentdaoimpl implements studentdao {
//列表是当作一个数据库
list
public studentdaoimpl(){
students = new arraylist
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
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");
}
}
步骤 4
使用 studentdao 来演示数据访问对象模式的用法。
daopatterndemo.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() " ]");
}
}
步骤 5
执行程序,输出结果:
student: [rollno : 0, name : robert ]
student: [rollno : 1, name : john ]
student: roll no 0, updated in the database
student: [rollno : 0, name : michael ]