二十九、数据访问对象模式
数据访问对象模式(Data Access Object Pattern),简称DAO,用于将底层的数据访问api或者擦操作逻辑封装起来,与上层的高级业务逻辑进行分离。
实现
创建一个数据实体类Student
,一个数据访问操作接口StudnetDao
,以及它的接口实现类StudnetDaoImple
,然后在调用接口对象,来操作数据。
创建对象类
Student.java
package patterns.dao; /** * Created by lenovo on 2016/12/12 0012. * 数据实体对象类 */ public class Student { private String name; private int rollNo; public 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; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", rollNo=" + rollNo + '}'; } }
接口
StudentDao.java
package patterns.dao; import java.util.List; /** * Created by lenovo on 2016/12/12 0012. * 数据对象访问接口 */ public interface IStudentDao { public List<Student> getAllStudents(); public Student getStudent(int rollNo); public void updateStudent(Student student); public void deleteStudent(Student student); }
接口实现类
StudentDaoImple.java
package patterns.dao; import java.util.ArrayList; import java.util.List; /** * Created by lenovo on 2016/12/12 0012. */ public class StudentDaoImple implements IStudentDao { //列表模拟作为数据库 List<Student> students; public StudentDaoImple() { students = new ArrayList<>(); Student s1 = new Student("robert",0); Student s2 = new Student("john",1); students.add(s1); students.add(s2); } @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.getRollNo()); } @Override public void deleteStudent(Student student) { students.remove(student.getRollNo()); System.out.println("清理掉了一个用户数据:"+student.getName()); } }
演示
DAOPatternDemo.java
package patterns.dao; /** * Created by lenovo on 2016/12/12 0012. * 演示 */ public class DAOPatternDemo { public static void main(String[] args){ IStudentDao studentDao = new StudentDaoImple(); //显示所有 for (Student student:studentDao.getAllStudents()){ System.out.println("Student:[RollNo: "+student.getRollNo() + " name: "+student.getName()); } //更新 Student s = studentDao.getStudent(0); s.setName("Marry"); studentDao.updateStudent(s); //获取指定编号的对象数据 System.out.println(studentDao.getStudent(0).toString()); } }
输出
Student:[RollNo: 0 name: robert Student:[RollNo: 1 name: john 更新了一个数据:0 Student{name='Marry', rollNo=0}