<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>http://wiki.eijux.com/index.php?action=history&amp;feed=atom&amp;title=%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%EF%BC%9A%E6%95%B0%E6%8D%AE%E8%AE%BF%E9%97%AE%E5%AF%B9%E8%B1%A1%E6%A8%A1%E5%BC%8F</id>
	<title>设计模式：数据访问对象模式 - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.eijux.com/index.php?action=history&amp;feed=atom&amp;title=%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%EF%BC%9A%E6%95%B0%E6%8D%AE%E8%AE%BF%E9%97%AE%E5%AF%B9%E8%B1%A1%E6%A8%A1%E5%BC%8F"/>
	<link rel="alternate" type="text/html" href="http://wiki.eijux.com/index.php?title=%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%EF%BC%9A%E6%95%B0%E6%8D%AE%E8%AE%BF%E9%97%AE%E5%AF%B9%E8%B1%A1%E6%A8%A1%E5%BC%8F&amp;action=history"/>
	<updated>2026-05-15T15:04:30Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.38.2</generator>
	<entry>
		<id>http://wiki.eijux.com/index.php?title=%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%EF%BC%9A%E6%95%B0%E6%8D%AE%E8%AE%BF%E9%97%AE%E5%AF%B9%E8%B1%A1%E6%A8%A1%E5%BC%8F&amp;diff=3000&amp;oldid=prev</id>
		<title>Eijux：​建立内容为“category:设计模式  == 关于 == 数据访问对象模式（Data Access Object Pattern）或 DAO 模式用于'''把低级的数据访问 API 或操作从…”的新页面</title>
		<link rel="alternate" type="text/html" href="http://wiki.eijux.com/index.php?title=%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%EF%BC%9A%E6%95%B0%E6%8D%AE%E8%AE%BF%E9%97%AE%E5%AF%B9%E8%B1%A1%E6%A8%A1%E5%BC%8F&amp;diff=3000&amp;oldid=prev"/>
		<updated>2021-05-09T11:26:49Z</updated>

		<summary type="html">&lt;p&gt;建立内容为“&lt;a href=&quot;/%E5%88%86%E7%B1%BB:%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F&quot; title=&quot;分类:设计模式&quot;&gt;category:设计模式&lt;/a&gt;  == 关于 == 数据访问对象模式（Data Access Object Pattern）或 DAO 模式用于&amp;#039;&amp;#039;&amp;#039;把低级的数据访问 API 或操作从…”的新页面&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[category:设计模式]]&lt;br /&gt;
&lt;br /&gt;
== 关于 ==&lt;br /&gt;
数据访问对象模式（Data Access Object Pattern）或 DAO 模式用于'''把低级的数据访问 API 或操作从高级的业务服务中分离出来'''。&lt;br /&gt;
&lt;br /&gt;
=== 结构 ===&lt;br /&gt;
以下是数据访问对象模式的参与者：&lt;br /&gt;
# '''模型对象/数值对象'''（Model Object/Value Object）：该对象是简单的 POJO，包含了 get/set 方法来存储通过使用 DAO 类检索到的数据。&lt;br /&gt;
# '''数据访问对象接口'''（Data Access Object Interface）：该接口定义了在一个模型对象上要执行的标准操作。&lt;br /&gt;
# '''数据访问对象实体类'''（Data Access Object concrete class）：该类实现了上述的接口。该类负责从数据源获取数据，数据源可以是数据库，也可以是 xml，或者是其他的存储机制。&lt;br /&gt;
&lt;br /&gt;
=== 示例 ===&lt;br /&gt;
创建一个作为模型对象或数值对象的 Student 对象。StudentDao 是数据访问对象接口。StudentDaoImpl 是实现了数据访问对象接口的实体类。DaoPatternDemo，我们的演示类使用 StudentDao 来演示数据访问对象模式的用法。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
其结构如下：&lt;br /&gt;
: [[File:J2EE 模式：数据访问对象模式：示例.png|600px]]&lt;br /&gt;
&lt;br /&gt;
其代码如下：&lt;br /&gt;
# 模型对象：&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
public class Student {&lt;br /&gt;
   private String name;&lt;br /&gt;
   private int rollNo;&lt;br /&gt;
 &lt;br /&gt;
   Student(String name, int rollNo){&lt;br /&gt;
      this.name = name;&lt;br /&gt;
      this.rollNo = rollNo;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   public String getName() {&lt;br /&gt;
      return name;&lt;br /&gt;
   }&lt;br /&gt;
   public void setName(String name) {&lt;br /&gt;
      this.name = name;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   public int getRollNo() {&lt;br /&gt;
      return rollNo;&lt;br /&gt;
   }&lt;br /&gt;
   public void setRollNo(int rollNo) {&lt;br /&gt;
      this.rollNo = rollNo;&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# 数据访问对象接口：&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
import java.util.List;&lt;br /&gt;
 &lt;br /&gt;
public interface StudentDao {&lt;br /&gt;
   // 查询所有&lt;br /&gt;
   public List&amp;lt;Student&amp;gt; getAllStudents();&lt;br /&gt;
   // 查&lt;br /&gt;
   public Student getStudent(int rollNo);&lt;br /&gt;
   // 改&lt;br /&gt;
   public void updateStudent(Student student);&lt;br /&gt;
   // 删&lt;br /&gt;
   public void deleteStudent(Student student);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# 数据访问对象实体类：&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line highlight=&amp;quot;4&amp;quot;&amp;gt;&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
import java.util.List;&lt;br /&gt;
 &lt;br /&gt;
public class StudentDaoImpl implements StudentDao {&lt;br /&gt;
   &lt;br /&gt;
   //列表是当作一个数据库&lt;br /&gt;
   List&amp;lt;Student&amp;gt; students;&lt;br /&gt;
 &lt;br /&gt;
   public StudentDaoImpl(){&lt;br /&gt;
      students = new ArrayList&amp;lt;Student&amp;gt;();&lt;br /&gt;
      Student student1 = new Student(&amp;quot;Robert&amp;quot;,0);&lt;br /&gt;
      Student student2 = new Student(&amp;quot;John&amp;quot;,1);&lt;br /&gt;
      students.add(student1);&lt;br /&gt;
      students.add(student2);    &lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   // 实现：查询所有&lt;br /&gt;
   @Override&lt;br /&gt;
   public List&amp;lt;Student&amp;gt; getAllStudents() {&lt;br /&gt;
      return students;&lt;br /&gt;
   }&lt;br /&gt;
   // 实现：查&lt;br /&gt;
   @Override&lt;br /&gt;
   public Student getStudent(int rollNo) {&lt;br /&gt;
      return students.get(rollNo);&lt;br /&gt;
   }&lt;br /&gt;
   // 实现：改&lt;br /&gt;
   @Override&lt;br /&gt;
   public void updateStudent(Student student) {&lt;br /&gt;
      students.get(student.getRollNo()).setName(student.getName());&lt;br /&gt;
      System.out.println(&amp;quot;Student: Roll No &amp;quot; + student.getRollNo() &lt;br /&gt;
         +&amp;quot;, updated in the database&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
   // 实现：删&lt;br /&gt;
   @Override&lt;br /&gt;
   public void deleteStudent(Student student) {&lt;br /&gt;
      students.remove(student.getRollNo());&lt;br /&gt;
      System.out.println(&amp;quot;Student: Roll No &amp;quot; + student.getRollNo() &lt;br /&gt;
         +&amp;quot;, deleted from database&amp;quot;);&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# 测试类：&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line highlight=&amp;quot;3&amp;quot;&amp;gt;&lt;br /&gt;
public class DaoPatternDemo {&lt;br /&gt;
   public static void main(String[] args) {&lt;br /&gt;
      StudentDao studentDao = new StudentDaoImpl();&lt;br /&gt;
 &lt;br /&gt;
      // 查询所有&lt;br /&gt;
      for (Student student : studentDao.getAllStudents()) {&lt;br /&gt;
         System.out.println(&amp;quot;Student: [RollNo : &amp;quot;&lt;br /&gt;
            +student.getRollNo()+&amp;quot;, Name : &amp;quot;+student.getName()+&amp;quot; ]&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
      &lt;br /&gt;
      // 改&lt;br /&gt;
      Student student =studentDao.getAllStudents().get(0);&lt;br /&gt;
      student.setName(&amp;quot;Michael&amp;quot;);&lt;br /&gt;
      studentDao.updateStudent(student);&lt;br /&gt;
 &lt;br /&gt;
      // 查&lt;br /&gt;
      studentDao.getStudent(0);&lt;br /&gt;
      System.out.println(&amp;quot;Student: [RollNo : &amp;quot;&lt;br /&gt;
         +student.getRollNo()+&amp;quot;, Name : &amp;quot;+student.getName()+&amp;quot; ]&amp;quot;);      &lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# 输出：&lt;br /&gt;
#: &amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line highlight=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
Student: [RollNo : 0, Name : Robert ]&lt;br /&gt;
Student: [RollNo : 1, Name : John ]&lt;br /&gt;
Student: Roll No 0, updated in the database&lt;br /&gt;
Student: [RollNo : 0, Name : Michael ]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Eijux</name></author>
	</entry>
</feed>