00:00
然后的话呢,我们讲了一个比较牛的一个应用,现在呢,我们正式来提出一个词叫DAO,我们前边啊,我们在讲张螂基础的时候呢,我们也整读过这个词,但是没有正式说过第一个DAO啊,Data数据访问对象叫数据访问对象,这个data你可以也可以称之为data数据库访问对象,那么说从一定范围说的话呢,也行好了,干什么用的呢啊。What,干什么用的呢?就是访问数据信息的类,然后包含了对数据的增删改查操作中CRUD操作,第二是啥呀?蒸山改茶R木对利利就是云木是吧?
01:26
中山改茶。二对二对,这么说啊,二对c rub正常改查好了,那包含了对数据的CD操作,这是啊,DA干的活而不包含任何逻辑相关的信息而不。包含任何。业务。相关的信息。
02:04
就是说这里边啊,我关注的处理数据的奶茶,别的我不管,而业务的话呢,往上一层走。那为什么需要它好Y?为什么需要它呢?因为什么呢,这样的话呢,更容易实现。代码的模块化,实现功能的模块化,实现功能的模块,诶我负责这个,你负责这个,比方说处理业务的,不需要管具体的这个访问信息,这个时候的话呢,更有利于代码的维护和升级。OK,好了,那how怎么做呢?具体怎么做的话,实际上具体实现方式不一样,比方说我访问这个数据是吧,是一个HM文档里边我可能写的是用解析XL的方式去写智能检查,但是这里边包含的方法呀,差不多我们看啊,我用JDBC写的话,目前它会包含哪些方法使用?
03:19
GDPC被告一写DAO可能会。包含方法,我们想有哪些,我明白,一个一个看第一个。怎么可能会有一个avoid up,那update里边,这里边可能会管什么呀,Update是不是都可以操出来啊,操作都可以包含在其中这。
04:05
我们把这个connection啊,先不传,如果后边基于事物的话,这个connection是要传进来的,我展时先不传,展现这么一些,展示一些circle口,这是我们第一个版本,然后。X能明白都是什么意思吧。住的circle和。Circle占位符的这个可变参数对吧?好了,然后查询,那这个里边的话是不是颜色的update的例是不是都有了呀?好了,查询是包含最多的一个,我有可能查询的是一个对象,有可能是一组对象,还可能是某一个对象的属性值吧。再说一遍啊,我查询的有可能是一个对象,有可能是一组对象,还可能是一个对象的属性值,还可能是一个啊这个统计对象,比方说我想查年龄的最大值,我想查有多少条记录啊,都可以,好,那我先看吧,先差一个对象的。
05:11
T一个对象吗?At,好,那我要是查一个对象的话呢,我也传入一个字,我也传入一个啊不类型的X,我还需要什么呀,我还需要你这个对象是什么类型的呀?啊是这个类型。我写过了,昨天啊,写过了,好再写一个。再写一个,还可能是查查一组吧,比方说哎,我想把这卡通信息全查出来,是不是t list类型啊,通常都是list哦,比方说for吧。
06:01
哎,我想全出来里边的参数是一样。八这是查询遗嘱对象,好了,查询一个对象查询一条。记录返回对应的对象,这个呢。查询多条记录,多条记录返回对应的对象的集合,再来有啊还有啊,还有还有可能返回。某个对象的某一个属性值,比方说我来写一个啊,这里边的话,我们写个E返回类型呢,是它,然后呢啊一类。
07:05
就是我返回的是某一个get或什么呢,Get吧。OK,某一个值里边放的东西呢,第一个不用有了,因为我返回的不是一个具具体的,这个不是具体对象,而是某一个,呃,字符串或者某一个,嗯,基本数据类型,好了,这个时候写个string的circle,写个object类型的啊,老是返回。啊,某条记录的某一个值或一个统计的值,统计的值是什么意思啊,比方说嗯,一共有多少。要记住OK,我们现在的话呢,就要写这样的一个DA。
08:05
好了,哎,那我这个DAO呢,可以干什么呢?它可以被子类继承,或者说直接或者是直接使用该DAO。D可以。被子类继承或直接是OK,咱DAO好,我们来写一下吧,DAO里边可能会包含这样一些方法啊,执行数据访问的过来新建一个DAO,里面有这么多方法。好,我明白了,第一个第二个。
09:07
第个第个来好了,有的。写完每个前面的话呢,需要加上一个public,那我刚才写完之后感觉像个啥呀,就感觉像一个接口一样,那现在我们看接口的话,这个意义还不大,我们到后边我们讲具体的这个案例的时候,我们去想为什么会有接口,目前写一个接口就是勉强的一个就往这一放好,第一个update这个方法的话呢,前面实际上我们已经写过了,那里边我们当然需要使用的是prepare statement。这个呢,我先给它复制出来,大家一会儿呢,把这个也得给它填完拿过来。
10:03
OK,明啊第一稿,那我们暂时把connection放这个方法里边了,这后边的话呢,我们需要把connection放在方法的外边,因为放里边的话是做不了事物的,特别是里边直接获取是吧?Action使用log,另外一个事下statement来看。看到没?P PT box点这个我们已经写过了啊,B点看collection等于EBC.collection一个,然后是等于connection.circle是不是可能会有站位符啊?For循环填空占位符in I等于零,I小于2.r,嗯,那现在是不是感觉这个可变参数非成可爱呀?是吧,我爱传几个传几个,里边还可以当数组用,最大的好处就是我不用把这个参数封装成一个数组了,我是不是可以直接往里边传呢?好处。
11:31
来写吧,我怎么写呢?Statement that,我不知道类型是什么,从一开始ask I,这是I哈,从一开始I加一开始是吧,行,然后执行一个更新。就完了。这方我们先写。啊,第二个,第二个的话呢,昨天也写过这个里边需要用到that。
12:08
我们讲了需要分几个步骤。第一个步骤。是啥来着?我们回想一下,我把这个我们完整一下,获取connection第二个步骤,获取二的STATEMENT3个步骤填充按所第四个步骤。得到的,再因查询二进行查询,得到的在下一个五。啊,下一个步骤我放知到那赛之后啊,啊不是知道那赛还不够,你看这个图。
13:02
看看,那这是一个circle口,这个circle,这个circle是什么我们都不知道啊,我在写这个方法的时候,这个circle是啥样,反反案我们不知道啊,所以说我根本就无法知道你有哪些列,列的名字是什么,我我完全不知道,那于是的话呢,这个时候我就结论它啊,然后首先我会得到一个结果基因,刚才我们说了啊,结果基因我们就要得到一个什么呢?得到一个这个呃,Result me推塔,它可以得到力的别名,这个别名实际上是数据库列名跟类的属性之间的一个映射关系,没有这个别名的话搞不定,因为我这个列列名可能是跟我的这个属性名可能完全完全不一样,比方说这叫ID,这叫ID这玩意根本就联系不上。
14:03
啊,然后他俩可以得到最终的这个结果,不过这个结果的话呢,带什么呢,是带这个呃类的别名的,实际上我们说这是一个脉,然后通过反射并对象,然后再把这一个一个值给加进来就可以了,并有关系哈,这是我们怎么怎么着。好,你过来吧。下一步我们要准备一个。一个map对象值是对不对,键值对不对,值是object,我们说键值这是剑是啥呢?剑是存放这个呃,实际上是存放。列别名,直存放。
15:03
列的值好了,第五步第六步,当然我们这个都是建立在什么,建立在这个基础上啊说。与藏赛中有一种。到中有记录,没有记录的话,一些的话是不用的好了,然后的话呢,得到date that at date对象好了,七七点半呢,下面的话呢,我就需要来处理这个处理到。对到啊在然后怎么样把指针向下移动一个单位,好吧,移动一个单位的话,意味着我这个,因为我这个我是不是我是不是可以,我是不可以处理了呀,但是我有哪些列不知道,列明是什么也不知道第八步,哎有有谁呢,由result sment data。
16:22
Result set对象得到,具体由具体结果集中,结果集中有多少八九再得到,哎,由什么呢?还是由他。得到每一列的联名,然后呢,再说一个,这由谁呢,由吕代。
17:07
得到具体每一列的值时。填充填充谁啊,填充map对象吧,是吧,Map对象11啊,那对象的话呢,如果要这样写完之后的话,说们这个map对象都是OK的啊11,然后是创建用反用反射是吧,用板设创建class对应的对象,哎,到这一块我们应该明白为什么说我们在写一个大类的时候,往往需要有一个无参的构造器,因为我们很多时候需要用反射去创建对象,再来12遍利map对象用反射。
18:10
用反射填充对象的属性值,其中属性名为属性名为map中干T吧,属性值为map中的Y流。听完了,转告这么多好了。YYY第一个TN等于二返回N行,那咱不得推开吃啊。
19:06
一点看异常我们目前没处理啊,It b c错点,Release没写,还有。写外边啊来是他说为啥要写外边啊,只有写外边,只有这个声明写外边的话,我是不是还能够得着啊,你把这玩意整这来,我底下是不是够不着了啊,写外边来。啊。
20:06
九。People action等于t b statement等于减口循环PII等于0I。小于二,点A下降。Regard said。I加ER。查询一个等于。
21:01
他给你点查询好吧,如果有记录的话,If。点有记录的话,我们开说别的啊,否则我们都不含好了,这个拿进来吧。好了,如果有记录的话,怎么写呢?碰见一个麦。等于六七。926267。九。创建一个合理对象set r smd等于s.data加上移一个单位,因为移完了是吧,是不有啊就不用写了,好吧,第八个有这个。
22:13
多少列得吧,Co等于RSMD点在Co好得到别名跟每一列的值,这是我们补充做理别例啊,那别例不行啊是吧,每一列的值吗?每一列的这个别名吗?哎,小于小于框哎,大家顿的等于。RSMD.light好。A加一。
23:01
哦。还有值四的Y等于道吧,遇到that.get。Object只能这能看object,我直接写这个label是不是也可以呀?是不是也可以啊,从这个平衡来获取是不是也可以啊,因为我这个盖的方法的话,能有承载的嘛,没关,写A加一是不是也行啊,一样的I加一,你看这课上面是不是刚好能对起来啊,一样的对外实际上这块的话呢,我们不贴那map也可以,是不是也可以,我是不是也可以直接往上加呀,就是图整个的话不填map也可以,贴map的话能清晰一点,你比方说我要是不填map的话,这就是属性,能利用属这个属性值呗,是吧,直接往那放也可以完添一些map吧。
24:06
好。填充map对象来用反射这个类,因为我现在的话呢,我已经在什么里边,我已经在这个,呃,衣服里边,就说这个是好用的直接object object等于8.new。梯破循环慢点N顿or value their entry site。内等于N,垂点概Y6吧,等于n.Y6好了,不值不值我们是不是得用反射啊,OK,不值我来用反射这个类的话呢,复值这个类我们不能再讲了哈,叫reflection u c作为过来。
25:17
最大化reflection set value写完就是我们的这个方法就完了。有写出一个地儿是吧,这应该写出呀,是不是N呀,要不的话改你看这么说。行了,以上的话呢,就是我们这个方法好了,我们写完两个了啊,这两个方法的话呢,以前都写过,我们现在我们对这个DAO进行一个测试,推荐这两个好不好用CTRLC,看如何具体对测某一个类呢,构建,新建一个值内的单元测试,新建一个JO单元测试,然后注意这块给DAO单元这块写daoca,然后Rose。
26:21
OK,下一步我们看撤这四个方法,选上object,不选的是类finish,这个时候它就会自动的给你写上这四个方法,然后我现在我们来写上说daoda等于6O,好,第一个,那我来添加一条记录吧,456来。String的个口等于insert into car写上哪些呢?
27:03
VALUE123AO点啊。嗯,小明。Email、小明APPAPP、硅谷car new是一个to date,除恶心,你们还需要它new,这个date是一个date。点get不用我们讲这个了啊,写完了跑一下。
28:03
看这个说这个了,小明,好了,查的话呢,我来查这个exam student circle口等于X,我们肯定不能写取X轻,为什么呢?因为这个里边的这个这个字段跟哦,我前提是我得有一个,我得有一个类吧,没有类的话你咋查呀,这类我直接复制了啊,这个类叫student copy,这就是一个一般的类,没有什么特别需要讲的啊,我来看那有ID type ID card card,然后对应S法,然后一个构造器无参的库存方法,这这没啥说的过来好了,但这个必须得写flow ID flow I大家。
29:03
那这个是什么呀,这个是不是数据库那个字段名呢,就这个属性名白啊type一样的,你在好。ID顺序无所谓等。二毛有点。Ad等于问号,然后得到一个student对象等于AO。
30:02
Yeah。小写啊,ao.get一个student.plus circle后是五。好,我们看五。这恐慌。啥问题啊?应该是说MY语法错误,这个table不存在exam student写法了吧?睡觉。再看。好对吧。行,这就是我们的这个方法有。
我来说两句