查看“设计模式:数据访问对象模式”的源代码
←
设计模式:数据访问对象模式
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
[[category:设计模式]] == 关于 == 数据访问对象模式(Data Access Object Pattern)或 DAO 模式用于'''把低级的数据访问 API 或操作从高级的业务服务中分离出来'''。 === 结构 === 以下是数据访问对象模式的参与者: # '''模型对象/数值对象'''(Model Object/Value Object):该对象是简单的 POJO,包含了 get/set 方法来存储通过使用 DAO 类检索到的数据。 # '''数据访问对象接口'''(Data Access Object Interface):该接口定义了在一个模型对象上要执行的标准操作。 # '''数据访问对象实体类'''(Data Access Object concrete class):该类实现了上述的接口。该类负责从数据源获取数据,数据源可以是数据库,也可以是 xml,或者是其他的存储机制。 === 示例 === 创建一个作为模型对象或数值对象的 Student 对象。StudentDao 是数据访问对象接口。StudentDaoImpl 是实现了数据访问对象接口的实体类。DaoPatternDemo,我们的演示类使用 StudentDao 来演示数据访问对象模式的用法。 其结构如下: : [[File:J2EE 模式:数据访问对象模式:示例.png|600px]] 其代码如下: # 模型对象: #: <syntaxhighlight lang="java" line highlight=""> 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; } } </syntaxhighlight> # 数据访问对象接口: #: <syntaxhighlight lang="java" line highlight=""> 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); } </syntaxhighlight> # 数据访问对象实体类: #: <syntaxhighlight lang="java" line highlight="4"> 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 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"); } // 实现:删 @Override public void deleteStudent(Student student) { students.remove(student.getRollNo()); System.out.println("Student: Roll No " + student.getRollNo() +", deleted from database"); } } </syntaxhighlight> # 测试类: #: <syntaxhighlight lang="java" line highlight="3"> 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()+" ]"); } } </syntaxhighlight> # 输出: #: <syntaxhighlight lang="java" line highlight=""> Student: [RollNo : 0, Name : Robert ] Student: [RollNo : 1, Name : John ] Student: Roll No 0, updated in the database Student: [RollNo : 0, Name : Michael ] </syntaxhighlight>
返回至“
设计模式:数据访问对象模式
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
笔记
服务器
数据库
后端
前端
工具
《To do list》
日常
阅读
电影
摄影
其他
Software
Windows
WIKIOE
所有分类
所有页面
侧边栏
站点日志
工具
链入页面
相关更改
特殊页面
页面信息