数据访问对象模式

数据访问对象模式

数据访问对象模式(Data Access Object Pattern)或 DAO 模式用于把低级的数据访问 API 或操作从高级的业务服务中分离出来。以下是数据访问对象模式的参与者。

  • 数据访问对象接口(Data Access Object Interface) - 该接口定义了在一个模型对象上要执行的标准操作。
  • 数据访问对象实体类(Data Access Object concrete class) - 该类实现了上述的接口。该类负责从数据源获取数据,数据源可以是数据库,也可以是 xml,或者是其他的存储机制。3
  • 模型对象/数值对象(Model Object/Value Object) - 该对象是简单的 POJO,包含了 get/set 方法来存储通过使用 DAO 类检索到的数据。

1、Studen.java

package dataAccessObject.model;

/**
 * student model
 * @author kangkang.tao
 * Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO。
 * 它也可以带有逻辑,在数据变化时更新控制器
 */
public class Student {

	private int rollNo;
	private String name;
	
	public Student() {
	}
	
	public Student(int rollNo, String name) {
		this.rollNo = rollNo;
		this.name = name;
	}
	public Student(String name) {
		this.name = name;
	}

	public int getRollNo() {
		return rollNo;
	}
	public void setRollNo(int rollNo) {
		this.rollNo = rollNo;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}

	@Override
	public String toString() {
		return "Student [name=" + name + ", rollNo=" + rollNo + "]";
	}
	
	
}

 2、StudentDao.java

package dataAccessObject.dao;

import java.util.List;

import dataAccessObject.model.Student;

/**
 * @author kangkang.tao
 * 创建数据访问对象接口。
 * StudentDao.java
 * 该接口定义了在一个模型对象上要执行的标准操作。
 */
public interface StudentDao {
	
	public List<Student> getAll();
	
	public Student getByRollNO(int rollNO);
	
	public void delete(int rollNO);
	
	public void update(Student student);
	
	public void add(Student student);

}

 3、StudentDaoImpl.java

package dataAccessObject.daoImpl;

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

import dataAccessObject.dao.StudentDao;
import dataAccessObject.model.Student;
/**
 * 创建实现了上述接口的实体类。
 * StudentDaoImpl.java
 * @author kangkang.tao
 * 该类实现了上述的接口。该类负责从数据源获取数据,
 * 数据源可以是数据库,也可以是 xml,或者是其他的存储机制。
 */
public class StudentDaoImpl implements StudentDao{
	
	List<Student> students;
	
	// 实例化几个学生对象
	public StudentDaoImpl() {
		students = new ArrayList<Student>();
		students.add(new Student(0, "kangkang"));
		students.add(new Student(1, "klan"));
		students.add(new Student(2, "tom"));
	}

	public void add(Student student) {
		students.add(student);
	}

	public void delete(int rollNO) {
		students.remove(rollNO);
		System.out.println("delete rollNO:" +rollNO);
		List<Student> students = getAll();
		
		System.out.println("after delete:");
		for (Student student : students) {
			System.out.println(student);
		}
	}

	public List<Student> getAll() {
		return students;
	}

	public Student getByRollNO(int rollNO) {
		return students.get(rollNO);
	}
	
	public void update(Student student) {
		Student stu = students.get(student.getRollNo());
		stu.setName(student.getName());
		
		System.out.println("update student's rollNO:" +student.getRollNo());
		System.out.println(stu);
	}

}

 4.Demo.java

package dataAccessObject.demo;

import org.junit.Test;

import dataAccessObject.dao.StudentDao;
import dataAccessObject.daoImpl.StudentDaoImpl;
import dataAccessObject.model.Student;

public class Demo {

	private StudentDao studentDao = new StudentDaoImpl();
	
	@Test
	public void getAll() {
		for (Student student : studentDao.getAll()) {
			System.out.println(student);
		}
	}
	@Test
	public void getByRollNO() {
		System.out.println(studentDao.getByRollNO(1));
	}
	@Test
	public void delete() {
		studentDao.delete(0);
	}
	@Test
	public void update() {
		Student student =studentDao.getByRollNO(1);
		student.setName("update");
		studentDao.update(student);
	}
}

 

猜你喜欢

转载自1142787827.iteye.com/blog/2342248