数据访问对象模式(data access object pattern)或 dao 模式用于把低级的数据访问 api 或操作从高级的业务服务中分离出来。以下是数据访问对象模式的参与者。
我们将创建一个作为模型对象或数值对象的 student 对象。studentdao 是数据访问对象接口。studentdaoimpl 是实现了数据访问对象接口的实体类。daopatterndemo,我们的演示类使用 studentdao 来演示数据访问对象模式的用法。
创建数值对象。
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;
}
}
创建数据访问对象接口。
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);
}
创建实现了上述接口的实体类。
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");
}
}
使用 studentdao 来演示数据访问对象模式的用法。
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()+" ]");
}
}
验证输出。
student: [rollno : 0, name : robert ] student: [rollno : 1, name : john ] student: roll no 0, updated in the database student: [rollno : 0, name : michael ]