1. StudenDaoListImpl.java与StudentDaoArrayImpl.java有何不同?
定义不同实现,两者功能相同但储存的方法不同。
1.StudentDaoArrayImpl.java:后台存储是用数组存储的时候,可以定义一个StudentDaoArrayImpl来专门来实现StudentDao;
2.StudenDaoListImpl.java:如果后台是用列表来实现可以定义另外一个类StudenDaoListImpl来实现。
这样可以轻松切换这两种存储模式。
2. StudentDao.java文件是干什么用的?为什么里面什么实现代码都没有?
定义一个StudentDao接口,里面有三个方法的声明,其他类通过继承StudentDao类,实现StudentDao.java文件中的方法,子类可以有着相同的三个方法声明,不同的子类也可以根据不同的要求写出不一样的方法代码。
3. 使用搜索引擎搜索“Java DAO”,选出几句你能看懂的、对你最有启发的话。请结合接口知识去理解。
一个典型的DAO 模式主要由以下几部分组成:
1、DAO接口: 把对数据库的所有操作定义成抽象方法,可以提供多种实现。
2、DAO 实现类:针对不同数据库给出DAO接口定义方法的具体实现。
3、实体类:用于存放与传输对象数据。
4、数据库连接和关闭工具类:避免了数据库连接和关闭代码的重复使用,方便修改。
在我看来,DAO 模式提供了访问关系型数据库系统所需操作的接口,将数据访问和业务逻辑分离对上层提供面向对象的数据访问接口,是为面向接口编程。
4. 尝试运行Test.java。根据注释修改相应代码。结合参考代码回答使用DAO模式有什么好处?
package stumanagement;
public class Test {
public static void main(String[] args) {
Student[] students = new Student[3];
students[0] = new Student("Tom");
students[1]= new Student("Jerry");
students[2] = new Student("Sophia");
StudentDao sdm = new StudentDaoArrayImpl(50);//使用数组实现
//StudentDao sdm = new StudenDaoListImpl();//使用列表实现
//往后台写数据,无需考虑后台是什么(到底是数据库、文件、数组、List)
//因为这里是面向StudentDao接口
System.out.println("===========写入学生========");
for(Student e:students){
if (!sdm.addStudent(e)){
System.out.println("添加学生失败");
}else{
System.out.println("插入成功!!");
}
}
System.out.println("===========显示所有学生========");
sdm.diplayAllStudents();
System.out.println("===========查询学生========");
Student temp = sdm.getStuByName("Tom") ;
if(temp == null){
System.out.println("查无此人");
}else{
System.out.println(temp);
}
}
}
好处:
通过StudentDao接口,可以创建两个不同的子类sdm,进行插入,查找,显示学生信息。两个子类通过不同的代码实现StudentDao接口里的方法,使得两个子类的运行结果都相同。
1.数据存储逻辑的分离:一方面避免业务代码中混杂的JDBC代码,另一方面,数据访问接口与数据访问实现相分离,这样精通数据库的人可以根据接口专注于数据库访问的最优化实现,而精通业务的人可以专注于业务逻辑编码。
2.数据访问底层实现的分离:DAO模式将数据访问分为抽象层和实现层,分离了数据使用和数据访问的底层实现细节。这样可以在保持上层结构不变的情况下,通过更改底层实现来修改数据访问的机制,比如只要通过修改数据访问层实现,我们就可以部署在不同数据库平台上。