接口-DAO模式代码阅读及应用

接口-DAO模式代码阅读及应用

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

StudenDaoListImpl.java是用列表的方式存储学生信息,StudentDaoArrayImpl.java是用数组来存储学生信息。两者在查找和添加两个方法有所不同,查找:StudenDaoListImpl.java从头开始判断名字是否相同,StudentDaoArrayImpl.java先要判断该元素不为空,在判断名字是否相同;添加:StudenDaoListImpl.java直接用列表的add方法在列表末尾添加,StudentDaoArrayImpl.java是从头开始找空的元素,将其存放进去。两者的显示方法差不多。

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

定义一个StudentDao接口,里面有三个方法的声明,其他类通过继承StudentDao类,实现StudentDao.java文件中的方法,子类可以有着相同的三个方法声明,不同的子类也可以根据不同的要求写出不一样的方法代码。

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

接口-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,运行结果相同。

好处:

通过StudentDao接口,可以创建两个不同的子类sdm,进行插入,查找,显示学生信息。两个子类通过不同的代码实现StudentDao接口里的方法,使得两个子类的运行结果都相同。

1.数据存储逻辑的分离:一方面避免业务代码中混杂的JDBC代码,另一方面,数据访问接口与数据访问实现相分离,这样精通数据库的人可以根据接口专注于数据库访问的最优化实现,而精通业务的人可以专注于业务逻辑编码。

2.数据访问底层实现的分离:DAO模式将数据访问分为抽象层和实现层,分离了数据使用和数据访问的底层实现细节。这样可以在保持上层结构不变的情况下,通过更改底层实现来修改数据访问的机制,比如只要通过修改数据访问层实现,我们就可以部署在不同数据库平台上。

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/114441.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • oracle的todate函数的日期格式_oracle date格式

    oracle的todate函数的日期格式_oracle date格式转自http://apps.hi.baidu.com/share/detail/10070907OracleTO_DATE日期格式大全Oracle中TO_DATE格式2009-04-1410:53TO_DATE格式(以时间:2007-11-02  13:45:25为例)       Year:            yytwodigits两位年              …

    2022年10月12日
    0
  • 安全帽识别 安全帽佩戴效果 安全帽检测 yolov4安全帽识别 yolov3

    安全帽识别 安全帽佩戴效果 安全帽检测 yolov4安全帽识别 yolov3施工场景下的行为识别领域。该应用领域在技术上可拆分为两部分:视频跟踪和行为识别。这一周密集调研了文献,发现着实是一个大坑。其中的视频跟踪最近的各頂会论文出现最多的是单目标跟踪,而我们要解决的确是多目标跟踪,最近出的较好的能实用性的是deepSort;真实的施工场景中摄像头的远近,拍摄的遮挡,工人服装的统一,重叠,违规动作幅度的大小等都是巨大的挑战;行为识别方面最近出的论文较多,能实用性的目前敲定ECO模型;在跟踪过程中某一个工人的时空管道数据的抽取也是一个难题等等。无论如何,这块硬骨头得啃下来。行为识别模

    2022年5月19日
    30
  • SpringApplication.run(MyApplication.class, args)运行流程源码分析[通俗易懂]

    SpringApplication.run(MyApplication.class, args)运行流程源码分析[通俗易懂]SpringApplication.run(MyApplication.class,args);如何启动springBoot项目的run()一个静态的辅助方法,可以使用默认设置和用户提供的参数从指定源运行SpringApplicationConfigurableApplicationContext大多数应用程序上下文(如果不是全部的话)将实现SPI(服务提供者)接口。除了Applicat…

    2022年9月9日
    0
  • 超简单部署使用Maven私库 Nexus

    超简单部署使用Maven私库 Nexusdocker拉取:dockerpulldocker.io/sonatype/nexus3运行容器:dockerrun-d-p8085:8081–namenexusdocker.io/sonatype/nexus,映射到本地的8085端口,等一会儿就好了,用dockerps-a命令查看访问地址:http://192.64.23.111:8085/)…

    2022年7月18日
    11
  • 判断一个数是否为素数(质数) c语言[通俗易懂]

    质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数。最小的质数是2,它也是唯一的偶数质数。原理:number只需被(2~根号下number)之间的每一个整数去除就可以了(包括根号下number这个数)。如果nummber不能被(2~根号下number)间任一整数整除,number必定是素数#include”stdio.h”#include”math.h”main(){ intnumber,i,n; printf(“请输入一个正整数:

    2022年4月7日
    50
  • 异或和左移的优先级_异或链表

    异或和左移的优先级_异或链表给定一个非负整数序列 a,初始长度为 N。有 M 个操作,有以下两种操作类型:A x:添加操作,表示在序列末尾添加一个数 x,序列的长度 N 增大 1。Q l r x:询问操作,你需要找到一个位置 p,满足 l≤p≤r,使得:a[p] xor a[p+1] xor … xor a[N] xor x 最大,输出这个最大值。输入格式第一行包含两个整数 N,M,含义如问题描述所示。第二行包含 N 个非负整数,表示初始的序列 A。接下来 M 行,每行描述一个操作,格式如题面所述。输出格式每个询问操

    2022年8月10日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号