1. StudenDaoListImpl.java与StudentDaoArrayImpl.java有何不同?
答:StudentDaoListlmpl.java是用列表实现StudentDao接口,StudentDaoArrayImpl.java是用数组实现StudentDao接口。它们的getstuByName中前者是用for(Student e:students),多用于列表。后者用的是for(int i=0; i<students.length;i++)。再者是列表可以直接使用add进行添加students.add(student)。而数组需要找到数组末尾的位置再插入。
2. StudentDao.java文件是干什么用的?为什么里面什么实现代码都没有?
答:定义接口,里面的是方法签名。Dao层也是数据访问层,是一个面向对象的数据库接口。在接口中我们知道,定义的是各个类共有的,是has-a的关系。我们只需要定义方法,也就是写入具体的方法签名。具体的实现是在类中实现的。
3.使用搜索引擎搜索“Java DAO”,选出几句你能看懂的、对你最有启发的话。请结合接口知识去理解。
答:DAO是一个为数据库或其他持久化机制提供了抽象接口的对象,在不暴露底层持久化方案实现细节的前提下提供了各种数据访问操作。使数据访问接口与数据访问实现相分离,这样精通数据库的人可以根据接口专注于数据库访问的最优化实现,而精通业务的人可以专注于业务逻辑编码。
理解:就是建立一个接口,接口中定义了此应用程序中将会用到的所有事务方法。在这个应用程序中,当需要和数据源进行交互的时候则使用这个接口,并且编写一个单独的类来实现这个接口,在逻辑上该类对应一个特定的数据存储。就如文件中的List和Array两种形式来存储学生的信息。对于这两种存储方式我们使用了studentDao接口,然后在StudentDaoListlmpl.java和StudentDaoArrayImpl.java中分别进行实现。可方便对于精通不同领域的人进行更直观方便的编码实现。这样可以使团队的分工更加明确。
4. 尝试运行Test.java。根据注释修改相应代码。结合参考代码回答使用DAO模式有什么好处?
使用列表实现:
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接口A
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);
}
}
}
使用数组实现:
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接口A
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);
}
}
}
Dao模式的好处:
答:DAO模式将数据访问分为抽象层和实现层,分离了数据使用和数据访问的底层实现细节。这样可以在保持上层结构不变的情况下,通过更改底层实现来修改数据访问的机制,比如只要通过修改数据访问层实现,我们就可以部署在不同数据库平台上。就像文件中的List和Array的方式,只需修改类中的方法实现就可以在不同数据库平台上使用。不论是文件,数组还是列表等等。