数据访问对象模式(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 ]