00:00
行,那么咱们这一章啊,其实一个比较重头的或者比较难的呢,就是这块关于泛型方,泛型类,泛型方法的一个使用,那虽然说呢讲完了,但是大家呢,想必还都比较迷糊是吧,尤其呢,是说我们什么时候会去造一个泛型类呢?啊,你要说集合里边去用泛型,哎,倒是相对比较清晰啊,咱们刚才也举例子啊,有跟没有啊,在集合中加泛型确实有一些区别啊,那咱们呢,什么时候会用到这个泛型类,乃至于说泛型方法,咱们先简单的给大家一种情境哈。啊,因为咱们这个具体的内容得到后边呢,再说这也是咱们讲这个Java基础的,算是一个不好讲的地方,就是呢,讲了很多东西,大家不知道到底该怎么用,而后边呢,就是比较形象啊,一做项目啊,你就都都知道这个,都能知道这要干什么啊,讲基础的话,有些东西呢,你说不说不太清楚啊,这块呢简单点让大家去体会一下,我这呢造一个结构呢,叫做DA啊,这个DA啊,别翻译成岛啊,造个类叫导,别这样啊DA这个什么叫DA呢?
01:08
导,嗯,Do啊,这里呢叫data data或者呢,有个叫啊叫access object。叫呃,数据访问对象,数据访问对象这个呢,呃,你就这个可能还不太好理解啊,你就理解成是什么呢,咱们后边呢,操作数据库的时候,咱们呢,需要提供一个Java类,这个Java类呢,就叫做do啊,在这个类当中我们去定义啊,操作数据库的一些通用操作。啊,比如说我们这儿呢数据库,我这呢是MYSQL,这是一个客户端,连接上我这个数据库服务器以后,诶,我就能够看到服务器当中的一些具体的数据了,这呢就是一张表,然后这个表是我们数据库中的一个结构,我现在呢想往这个表中啊,填一条数据,删一条数据或修改一个数据等等,或者查询做这样的事情,那么这些事情正好跟我们Java当中的增删改查也是一一对应的,那就相当于我们这个do做什么事呢?在这个do里边我们去定义一些,哎,通俗的操作数据表,或者换句话说呢,表其实也对应的是咱们账碍中一个类了哈,哎,我们回过来呢,就是操作具体的某一个类,它的一些增删改查方法。
02:25
啊,我们把这个通用的操作,数据库的增删改查的操作呢,就写在这个do当中啊,那么写在do当中,它里边自然而然的就会有叫添加一条记录。哎,这样的方法就是往数据库里边添加一条记录啊,然后删除一条记录。嗯,然后呢,修改一条记录。比如说呢,某个员工人家的工资呢涨了,诶你得给人家把这个工资这个属性呢改一下查询,我想查询某个ID的员工啊,查询一条记录,那也有可能让我想查询多条记录。
03:13
比如大家呢,你想查询你上个月的一个呃,话费的情况啊,话费的缴费明细,这就涉及到好多条记录啊,多条记录。好,那么我们这个dau呢,就是大家可以理解为操作数据库的一些通用的操作,哎,我们就写到这里边了,就是呃,天山改查这样的操作,那么天山改查既然它是一个基本的操作数据库的一个操作了,那我们这样的去填充它的一个结构,但是呢,大家想我这里边有好多张表,这每一张表是不是都有可能增删改查呀。对,那都有可能在这改查,你这呢,又是一个比较基本的一个结构,那你到底操作的是哪一张表。或者再换句话说,这一张表呢,咱们对应的在Java中都会有一个类啊,给大家去做对应,哎,咱们这个在后边讲会提到,这叫orm的一个思想啊,O就是object relational mapping啊,这个对象关系映射啊,呃,这个听着挺高大上的,简单来说就是我让这个表呢对应一个Java类,比如说你这个,呃,Customers这个表我是不是造一个Java类就叫做customer。
04:22
这呢其实也体现咱们叫万事万物皆对象啊,在你那是一张表,在我那儿呢,就是一个类,然后这个emp呢,就是个员工,那我是不是就造一个叫employees的一个类啊。啊,这个你写成大写啊,找个类,每一个都如此,我们都让数据库当中一张表对应Java中的一个类。那我们操作每一张表,相当于你是不是就操作每个类了。加一条记录,不就是多造一个类的对象吗?哎,删一条记录,不就把这个对象删掉吗?修改这里边的某一个属性,不就是给他这个属性set一下查询,不就return这个对象,你要是多个对象return一个对象构成的list不就完了吗?诶所以都归结为是操作这个类,那么操作类回过来这个类啊,你你这里边儿有好多张表这块呢,是不是就可能是好多个类,那到底是哪个类啊?
05:13
不确定,不确定怎么办呢?不确定我就写一个T呗。我就写个T。T呢,就是回头啊,回头怎么办呢?比如说我这里边儿关于这个通用的一些这个操作呢,我就写完了啊,洗完以后呢,你就可以去提供一些具体的咱们这个do的一些子类了,比如说啊,我就叫一个叫啊我先这样吧,先给我提供个类呢,叫做customer,我让这个类在这我简单写明一下啊,说此类就对应数据库中的啊,这个叫诶customers这个表啊。那么我们表中添加一条记录,就是造这个类的一个对象,那我们接着呢,去提供一个谁呢啊,提供一个叫卡斯特的DA,说白了就是DA呢,是里边有层山改查数据库中表记录的事啊,那我们这个custom do呢,让他去专门去操作这张表的。
06:14
啊,那我们让这个就直接呢去继承于咱们的do do呢,把这些方法都给你写好了,你直接继承过来就能用,只不过呢,在这时候你指明一下咱们呢,哎,这是customer。这是customer,那这块呢,可能还没有体现出来,那你这块写写这些方法啊,比如说我向这个数据表中添加一条记录,那你可以写成是个avoid了吧,我们就叫A,那你添的不就是个T的一个T呗,具体怎么填咱们就不想说了,这是咱们后续的知识啊,这个就你加进去了,然后呢,叫删一条记录删删也是个VO吧,或者你写个波尔行也行,看这个是不是删成功了是吧?哎,我们叫remove,哎,你就呢,把这个T再放进去,或者说呢,你要是一个呃,放到集合里边,我是不是可以按照这个索引去给你删呀,哎,这么着,这个我们暂时先return一个false啊。
07:10
核心的这个代码我们就不多写了,在下面修改一条记录,修改呢,你写一个word,我们叫一个update修改,哎,我们把指定的某个位置上的这个数据呢,改成一个新的,这不就是修改吗?说查询一条记录,查询你得返回吧,你返回个T呗,我就GET1条记录啊,Get指定这个index位置上的一条记录。哎,我这里边就给你return,暂时呢咱们就写return now了,查询多条记录,我就public,哎这块呢,就是查一个list啊T叫get for啊,List不用写参,呃,也可以写个参数啊,比如我们想查询这个呃,小于这个index的所有的数据,哎,我这呢就return,哎暂时呢咱们没有写方法体,后续讲啊。
08:01
那么你看我这里边儿写的都是通俗的操作,呃,这个数据库中这个表的这样的一些方法了,我这个写完以后,咱们在卡do这块呢,我一继承。你想这些方法呢,是不是就具体了,哎,就具体了,那就意味着啊,咱们这做一个测试。关于do的啊,一个测试啊,在这里边,哎,Public avoid,哎,Test啊一我这个时候呢,我去造一个customer do,哎这样造好以后,你看我这种do,我去调这个所谓的增删改查,比如说我们艾。你看这时候艾是不是只能去填一个customer,它就非常的严格啊,你这个do就是用来操作customer的,你可以去new一个,哎,所谓的customer这个对象,哎,那么删除啊,包括你这个查询呀,咱们想get for list啊,我想查询小于这个index时的所有的记录,返回的又是一个。
09:06
构成的是一个list。哎,这就这样了啊,就这样了,好这呢是我们造好了,他和他那如果说呢,你现在还有另外的一张表啊,比如说像这张表啊,比较简单,换一换一个吧,比如这个吧,嗯,行,这个也行,这个呢是关于这个学生的哈,是关于这个学生的,学生呢有这样的一些属性,那么我们这个表呢,同样的也会做一些增产改查操作,那回过来你呢,就首先提供一个类,就叫做student啊,这个类呢,里边属性你你可以参照我们这个里边这个列这个字段啊,去填充我们这个属性,这呢就不多说,接下来你造一个deal,我就叫做哎student do,哎呦,写错了。这个我们去做个rename这个O啊。
10:01
我让这个student do呢,去继承于咱们的这个do,这时候我们指明你操作的呢,就是student。好,完事,那么再回过来,我们到这测试这块啊,这个啊,直接写到这个下边了,我们去new一个叫student deal enter,得到一个deal。啊叫DO2,那么这个do它呢,你去艾特也好啊,去增删改查也好,它只能够用来操作student。啊,那我们换换一个啊,比说叫哎,咱们还有去get一个具体的,哎拿到比如说索引是一这个位置上的这个数据,哎返回来就是一个学生这样。哎,这呢,其实就是我们后边的一个体会啊,也稍微形象一点了,就是我们呢,确实有必要呢,后续在定义类的时候呢,把这个类呢,就声明成是一个带泛型的了,因为呢有不确定性,它呢是一个操作数据库的基本的一个类啊,或者叫贝斯do啊,最基本的一个自然改查的一个封装了,那么你接下来去提供它的子类,子类当中只能够用来操作某一个表。
11:12
啊,只能用来操作某一个表的一个DA啊,这呢,我们标识一下啊,只能操作某一个表的这个,哎,这个do啊,而咱们这个,呃,把它呢这个。啊,CTRLC这个咱们在这儿也写一下啊,这也是啊,而我们这个DA啊,它呢是操作啊表的啊,这个通识的操作啊,这个或者叫共性操作啊,啊或者叫表的共性操作的解啊。嗯,Do,哎,这是这样个情况,行,这呢就是说这个泛型类的一个使用情境,那么泛型方法的话呢,嗯,这块我没有去举例子哈,嗯,那咱们比如说举一个情况啊,后边呢,有可能也会在我们这个do里边呢,去写一些泛行方法啊泛译方法呢,你注意它前边一定会有这个标识的啊,那我们这就用个E吧,哎,比如我们就要get一个value,哎这个呢,具体里边逻辑我就不写了啊哎,暂时呢,我就先return一个now,这首先确定一下这是一个翻译方法吧,哎,这是的啊,那这个翻译方法我们举个例子啊,举个什么例子呢?就是首先呢,这个翻译方法咱们也知道了,它有不确定性,因为你不确定,所以我们才写成是个E了,你要确定是个int,我就写明了啊啊,不确定,那不确定呢,就是它调的时候呢,可能会有多种情况啊,那比如说咱们做这些事儿,我呢想哎,获取表中一共有多少条记录。
12:53
那我要是这样的方法,你说这个E是谁啊,什么类型啊。
13:00
是不是整形啊,哎整形大家呢,说是实际上的话呢,这个呃是浪啊,哎实际上是浪,就是返回这个记录的话呢,他怕你这个不够哈,它实际上呢是个浪类型啊,至少你知道它这是一个整形的,那么还有可能比如我想哎说获取说呢叫嗯什么呀,最大的嗯。这叫什么员工入职时间?那你这块是不是就返回的是一个date类型啊,那这时候呢,当然还有其他的一些各种各样的一些奇怪的诉求,那这些诉求呢,它的返回值的这个类型不确定,所以说我们这个方法呢,才定义成是一个泛行方法,同时呢,你这个E类型跟我这个T有关系吗?没关系啊,啊,你这个T你是customer啊,你是这个什么,这个student啊哎,我这块呢,表示的是一些整形的,是一些时间的啊,所以泛型方法它所在的类是不是泛行类没关系,跟你那个你这是一内是T,它俩之间也没有任何关系,行,那通过咱们举的这个例子啊,后边呢,咱们会讲到这呢,只是泛泛的给大家这样描述了一下啊,你去体会一下我们啊,使用泛型类或者是泛型方法的一种实际情境。
我来说两句