DAO模式代码阅读及应用

 

DAO模式是接口的一个典型应用。

 

1. StudenDaoListImpl.java与StudentDaoArrayImpl.java有何不同?

//StudenDaoListImpl.java



package stumanagement; import java.util.ArrayList; import java.util.List;
public class StudenDaoListImpl implements StudentDao { private List<Student> students = new ArrayList<Student>(); @Override public Student getStuByName(String name) { Student temp = null; for(Student e:students){ if(e.getName().equals(name)){ temp = e; } } return temp; } @Override public boolean addStudent(Student student) { students.add(student); return true; } @Override public void diplayAllStudents(){ for(Student e:students){ if (e != null) System.out.println(e); } } }
//StudentDaoArrayImpl.java
package stumanagement;

public class StudentDaoArrayImpl implements StudentDao {

    private Student[] students;
    
    public StudentDaoArrayImpl(int size) {
        students = new Student[size];
    }

    @Override
    public Student getStuByName(String name) {
        Student temp = null;
        for(int i=0; i<students.length;i++){
            if(students[i]!= null){
                if (students[i].getName().equals(name)){
                    temp = students[i];
                    break;
                }
            }
        }
        return temp;
        
    }

    @Override
    public boolean addStudent(Student student) {
        boolean success = false;
        for(int i=0; i<students.length;i++){
            if(students[i]==null){
                students[i] = student;
                success = true;
                break;
            }
        }
        return success;
    }
    
    @Override
    public void diplayAllStudents(){
        for(Student e:students){
            if (e != null)
                System.out.println(e);
        }
    }

}

两种java文件都可以实现3个功能

  • getStuByName(String name) 查询学生信息;
  • addStudent(Student student) 添加学生;
  • diplayAllStudents() 显示所有学生;

但是每个功能的实现方式不同,这两个方法对于学生数据的存储的数据结构不同。StudenDaoListImpl.java用List列表的方式存储,StudentDaoArrayImpl.java用数组的方式存储。

2. StudentDao.java文件是干什么用的?为什么里面什么实现代码都没有?

 

//StudentDao.java


package stumanagement;

public interface StudentDao {
    public boolean addStudent(Student student);
    public Student getStuByName(String name);
    public void diplayAllStudents();
}
StudentDao.java是DAO接口,DAO接口的作用是:把对数据库的所有操作定义成抽象方法,可以提供多种实现。因为其中方法为抽象方法,所以没有实现代码。

3. 使用搜索引擎搜索“Java DAO”,选出几句你能看懂的、对你最有启发的话。请结合接口知识去理解。

参考文档:https://www.jb51.net/article/127382.htm

DAO(Data Access Object)顾名思义是一个为数据库或其他持久化机制提供了抽象接口的对象,在不暴露底层持久化方案实现细节的前提下提供了各种数据访问操作。

DAO模式实际上包含了两个模式,一是Data Accessor(数据访问器),二是Data Object(数据对象),前者要解决如何访问数据的问题,而后者要解决的是如何用对象封装数据。

 

个人理解:DAO模式就是建立一个接口,接口中定义了此应用程序中将会用到的所有事务方法,但是DAO接口不提供对这些方法的实现。当需要和数据源进行交互的时候则使用这个接口,并且编写一个单独的类来实现这个接口,在逻辑上该类对应一个特定的数据存储。

 

4. 尝试运行Test.java。根据注释修改相应代码。结合参考代码回答使用DAO模式有什么好处?

DAO的好处就是提供给用户的接口只有DAO的接口,所以如果用户想添加数据,只需要调用create函数即可,不需要数据库的操作。

DAO还将接口和接口的实现类分隔开,接口用于规范实现类,实现类一般用于用于操作数据库!

5.可选:编写一些使用DAO模式的代码。比如使用文件作为购物车存储底层。

 

 

posted @ 2020-10-25 19:07  茅志雄  阅读(138)  评论(0编辑  收藏  举报