1.StudenDaoListImpl.java与StudentDaoArrayImpl.java有何不同?
-
StudentDaoListImpl.java使用的是List(列表)接口,StudentDaoArrayImpl.java使用的是数组接口。
-
二者设置的属性不同:前者是ArrayList类,后者是数组;
-
对应的方法内容不同:前者在方法中直接使用引用;后者要创建一个设置数组长度的方法,并在方法中不断判断数组是否为空。
2.StudentDao.java文件是干什么用的?为什么里面什么实现代码都没有?
作用
定义了学生数据访问接口,并在里面定义了三个方法(具体的方法签名)。
原因
具体的方法在类中实现,其它类通过继承StudentDao类来完成StudentDao.java文件中的一种方法的多种方法实现。这样便可以根据存储数据方式来定义不同实现。
3.使用搜索引擎搜索“Java DAO”,选出几句你能看懂的、对你最有启发的话。请结合接口知识去理解。
DAO 模式的优势就在于它实现了两次隔离。
- 1、隔离了数据访问代码和业务逻辑代码。业务逻辑代码直接调用DAO方法即可,完全感觉不到数据库表的存在。分工明确,数据访问层代码变化不影响业务逻辑代码,这符合单一职能原则,降低了藕合性,提高了可复用性。
DAO把对数据库的操作(业务逻辑方法)封装在里面,并单独写一个类来实现这个接口在逻辑上对应的数据存取,这样数据库就和方法分开了,外界调用方法时只知道这个方法可以实现什么却不知道具体细节和数据的储存处理,保证代码的安全性和严密性。
4. 尝试运行Test.java。根据注释修改相应代码。结合参考代码回答使用DAO模式有什么好处?
数组实现
package stumanagement;
public class Test {
public static void main(String[] args) {
Student[] students = new Student[4];
students[0] = new Student("Tom");
students[1]= new Student("Jerry");
students[2] = new Student("Sophia");
students[3] = new Student("Lay");
StudentDao sdm = new StudentDaoArrayImpl(50);
//StudentDao sdm = new StudentDaoListImpl();//使用列表实现
//往后台写数据,无需考虑后台是什么(到底是数据库、文件、数组、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);
}
}
}
运行结果
列表实现
package stumanagement;
public class Test {
public static void main(String[] args) {
Student[] students = new Student[4];
students[0] = new Student("Tom");
students[1]= new Student("Jerry");
students[2] = new Student("Sophia");
students[3] = new Student("Lay");
//StudentDao sdm = new StudentDaoArrayImpl(50);
StudentDao sdm = new StudentDaoListImpl();//使用列表实现
//往后台写数据,无需考虑后台是什么(到底是数据库、文件、数组、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);
}
}
}
运行结果
DAO模式好处
- 将三个方法和Student数据的具体访问分开,数据库的修改只要修改DAO层的访问方式就可以了,不用整个项目都进行修改。
- 只要修改数据访问方式就可以在不同数据库平台上使用,这里使用了数组和列表两种方法访问。