00:00
好,那接下来呢,我们要去关联这个SKU的这个。为了。对吧,那我们想一下我们应该用什么,呃,这个地方呢,是我们的一个流,那我们是不是每一条数据,我都应该拿着这个SQID去查一下我们的SKU。For这张表。然后呢?把它拿过来,把对应的信息补充上。就是每一条数据都要去做这个事儿,对不对。嗯。就是说我们现在呢,要去关联微表那一段,可能想到了关联微表呢,之前我们用过一个叫lookup draw对吧,但是那个呢是弗link circle克那边的,现在呢,我们不是弗Li circle,我们data。
01:05
对吧,那如果每一条数据我都要用这个SQID去。拿着SQID去查询我们的。为表啊,查询我们的Phoenix里边的SKU for对不对,所以呢,这边我们应该用。哪个方法?我们应该用哪一个方法,大家告诉我。嗯。我们应该用哪一个方法?有哪个算子啊?完了。
02:05
回了。就是说我现在要拿着SQID去查一下维表,补充信息,每一条数据都要做这个事儿。有哪个算子不知道。对呀。用不就完了吗?这不知道是什么意思呢?对吧,那我们要关联为表,起码得用一个rich。Map吧,好用一个rich map对吧?好,那我们先把这个写一下,那为什么用reach map呢?因为我们呢。要去创建连接啊,起码你在这边啊,你在这儿咱们是不是要。
03:04
创建。非斯连接池啊,我们之前用德鲁伊写过一连接池,还记得吗?对吧,我们得创建这个连接池,完了之后呢,得从这个连接池里边取那个连接吧,对吧?那不管怎么样,你要获取连接池也好,获取连接也好,那我们肯定用open对吧?嗯,在map里边呢,也没必要啊,那么我们就直接在这儿获取连接池,这里面呢,我们就干什么呢,查询。查询这个为表吧,查询表查到的信息,怎么样将查到的信息补充至。招病种。对吧,你不就查吗?你每一条我还特意强调,我说你每一条数据都要根据SKUID去做这个查询,对吧,然后关联维表,把这个数据呢补充上,那不就是麦嘛,对吧,而且呢,你肯定要有返回值啊,对吧,每一条数据都要有返回值,返回值啊是他自己,因为现在呢,里边有很多东西都是默认值那。
04:06
对吧,现在呢,你就。得把它补充上啊,起码这三个对吧,第一次我们要补充这三个,好,嗯,那这个其实很简单啊,你查询一个SK for对吧,你就写一个搜索语句select的新from SK in for在这写,但这样很明显不好,为什么呢?因为你不止这一个,为表你未来呢,还有这。你这个位置还要查询尾表呢。对吧,如果你这个地方直接写了select,新from SK,那这儿呢,你是不是也得写死from po from trademark from这个category对吧?好,那这是一个需求,那下面还有需求呢,这儿下单对吧?呃,省份诶,关联省份维度的对吧?这边还有一个退单,呃,关联这个品牌品类用户的对吧?嗯,那这边呢,还有一个退单的业务那。你是不是都要。写死啊,那没必要,我们是不是可以在这边完全把这个查询封装成一个工具类来做这个事。
05:06
对吧,那这样的话,我不用每一次都去写了,因为你这里边获取连接,我们知道JDBC的使用方式呢,你有circle对吧,然后呢,预编译circle。预编搜索以后呢,给占位符赋值,然后呢去执行对吧,那这个操作呢。查询尾表当中。只有什么,我们的语句不一样吧?对吧,和你的返回值可能诶不太一样,对吧,只有这个东西不太一样,那完全呢,我可以封装成一个工具类,把它所做的什么乱七八糟那些事儿呢,全部放在工具类里面,我不用重复的去做。OK吧,啊,所以呢,这边咱们要写一个工具类。啊呃,这边工具类里边我们叫什么呢?叫。查询的一个工具类啊,GDBC。
06:04
油条。啊,咱们叫jdbc u,注意我没有取名跟Phoenix相关,也没有取名跟MYSO相关,对吧,我直接叫jdbc u。啊好,那这里面呢,我们来写一个方法啊,那至于我为什么叫ttpc u9啊,因为接下来我们将把这个工具类封装的非常通用,通用到什么程度呢?来注意看啊这边。希望。当前的工具类。当前工具类可以适用。鱼。任何接DBC。方式。访问的数据库。中药。任何。查询语句。
07:05
哈,咱们要通用成这样。知道吧,就是只要你是通过JDBC访问。且你是查询的语句OK,你就都可以用这个工具类。OK吧啊,咱们就非常通用,所以呢,我叫gdpc u啊,或者你叫gdpc query也可以啊,当然呢,我们这里边就写查询啊,其他的什么增删改这个我们就先不涉及,就先聊查询。OK吧,好。呃,那么接下来我们来写这个东西。Public。完了。返回值。我们应该用。什么类型的?大家思考一下。啊,对于这个工具类而言,我们的返回值应该用什么数据类型。
08:17
嗯。大家觉得?我们这儿的返回值应该选用什么数据类型?那这个时候得怎么想啊,因为我们这个地方呢,是应用于数据库查询的返回值结果把它封装起来的一个。内容吧,就是这个返回值类型对吧?好,那我们就得思考从一个数据库里边查询到的。数据。对吧?从一个数据库里面查询到的数据,它有哪些可能性呢?我们要把这所有的可能性都考虑上,然后写一个通用的类型,对吧?你得把所有的都考虑上,然后呢,写一个通用的数据类型。
09:20
大家思考一下。我们应该。又是什么?先生。我们用接吗。牛总。金森就可以了吗?T。用T可以吗?啊好,有出现了一个list。啊,Map。啊,为了通用,我们到底要选什么?你看这都各不一样啊,杰森范型T。
10:00
啊,然后绿色。Map。那这个时候呢,我们想一想啊,我们的查询语句总共有哪些可能性,我给大家写一下第一类select。Count。心。From体表。对吧,这是第一类啊,注意第二类是这样子的。啊,第二类,比如说这边呢,有一个de PT。ID。Group。By de p t。啊呃。我想想看啊。嗯。第一批的ID。呃,不要这样吧,第二个这样啊。
11:01
第二个是这样的。好,呃,那么第三个。他这样子。这第三个啊,第四个呢,是这样子。能明白吗?我所写的那么第一种属于什么?属于返回值结果最简单的这种叫单行。单列。对吧,我只有一行一个列啊,那第二个呢。
12:00
当是什么,是那个心。From t。对吧,哎,这边多了一个。From t will ID等于1001,且我注释了ID为主键,那么它是什么?它是单行。玻璃对吧,好,那对于这个呢,Select name。From t表我只差一个列,那很明显它是多行。单列最后一个,我直接什么都不给,对到的新from t表。我塞了个新表对吧?嗯,前提是这张表呢,有多个列多个行嘛,对吧,好,那么它就是什么。多行。多列。对吧,那为了考虑通用性啊,那这是不是从简单到复杂呀,对吧,它是最简单的,中间两个呢,不分伯仲,因为一个是多行一个多列,对吧,那到最后多行多列。
13:01
我们是不是得考虑你最终封装的结果这个类型对吧,得包含能把这种给我表达了能不明白对吧,因为在搜狗查询层面,我们是不是可以把搜狗归纳为这四种吧。是吧,你再还能找出其他的一种吗?没有了吧,对吧,单行单列,单行多列,多行单列以及多行多列。对吧,那我写到这儿,你再说我们应该用什么数据类型。咱们应该用什么数据类型?啊,我讲到这儿了,你再思考一下应该用什么数据类型了。啊,就是说这里边儿为了通用性,我们得能表达多行多列的这种情况。
14:03
对吧,你不能考虑单行单列,如果单行单列。那我当然写一个T就可以了,随便写一个类型对吧?啊,或者你写一个object是不是也可以。对吧,你写一个object都可以,你单行单列嘛,就一个单值对吧,那你如果你写一个object,那你多行多列怎么表达呢?表达不了,所以你得。首先想到。多行多列,咱们应该用什么类型能够给他表示了,给他表达了对吧。怎么做?应该用什么,大家告诉我。我为什么带着他分析了一下,反而没有答案了呢?就是前面有没有要改的啊,说杰森t list map有没有要改的。
15:03
对吧,就不改,还是坚持大家之前的那个什么,包括育总的阶层object。就我现在带着你分析了,他有这种可能性对吧,那么有没有改的。这是什么map?括号,String list object。你你这个东西啊,因为我看到的是这个样子,我就大胆的猜测一下啊,这个云总所说的所说的是什么呢?是这个,诶错了,不能在这啊。是。云总所写的应该是map。呃,然后呢,这个key是一个three。然后呢,这个是一个list list里边呢又是一个。Object。云总所写的是这个吗?是不是,然后。
16:00
杰总,杰总写的是例子的杰森。是list。杰森。啊,那个。杰总,你应该是他是吧?接三号价格的对吧。然后云总呢,是这个是。Map string object。没看懂。啊,那个方总又改了对吧,呃,方总说的呢,是他。List这里边呢,放map。对吧。云总是这个,但是云总这个说实话。没太看懂,你这个给什么,这个思干嘛了。你这个是存主件是吗?
17:06
这个存列名啊。然后这是一个列的值是吗?哦,我懂了,你假如十行这是一个列名,然后呢,这边存十十个列,那那你这种啊,这种肯定不行啊。对吧,你觉得你这玩意写出来好用吗?你看啊,我三个写的是select新from这个T表,我一行一行数据呢,你数据呢,把我封装成一个列一个列。当然能封装哈,能封装,但是呢,你这玩意儿最后一点都不好用。能懂吗?你这个东西一点都不好用,你把列存一块了,这好用吗?不好用对吧,我看其他两个东西啊,List杰森list map是不是可以啊。对吧,啊,那就是首先呢,考虑到多行的情况,那我用一个list。集合嘛,因为你是一个数据库,你每一行数据呢,结构应该是一样的,对吧,所以呢,我用一个list没毛病。
18:08
对吧,好,那接下来你那一行数据呢。一行数据。有列名,有列值,所以呢用接算对象或者用map是不是合理啊,用一个现值对象吧,所以呢,我们。比它搞得更通用一点,用什么呢?用list注意看啊T,因为有可能这玩意儿呢,我不想把它封装成一个具体的map或者接son对象,假如说我有一个招聘呢,对吧,所以呢,我用一个T,我用什么呢?我用泛型。我用。OK吧,我不用什么map,也不用这个Jason object啊,当然用object和map也都可以表示这个通用的。OK吧,但是呢,有时候我自己写了这个为表的招聘啊。
19:00
对吧,你还得先转成结算,再转成招聘,真麻烦,那我就倒不如直接我就传招聘进来对吧?好,那这个呢,我们就这样写啊,叫query。List对吧,好。好,接下来到我们讨论。我们应该有什么参数了。对吧?呃,那这是为了通用性,我们的返回值用了list t,对吧,每一个每一行数据呢,封装成一个T对象。然后呢,由于考虑到多行数据存在,所以呢用一个例子,当然单行也能放单行,无非我这个集合当中只有一条数据呗,对吧?所以呢,我们只要把这个能封装进去,前面这个都能封装进去,无非你单行数据,你集合当中只有一条数据呗,那也无所谓,对吧?好,接下来考虑参数,大家觉得我们应该传什么参数,就奔着我们目标去,我们呢,是希望这个工具类可以适用于任何JDBC的。任何的查询。我们应该用。
20:04
什么参数?啊。啊,首先得有这个连接啊,对了,或者说呢,你得有这个JDBC的相应的参数,对吧,那我就直接把连接传进来是不是可以了。啊,那首先呢,要有连接没毛病。啊,然后是查询语句,对了。啊,查询语句。啊。
21:00
方总说觉得用T更好,T也可以是集合,是吗?你可以尝试写一写。啊。你可以尝试写一写。我懂你的意思,你的意思呢,就未来我这个T呢,我直接写个T对吧,直接写个T,那未来呢,我表示单行单列的时候,我就传一个单值对吧,我可能传的是一个inter,可能传的是一个long,对吧,那我表示它的时候呢,我传一个list,什么Jason object,你尝试去写一写。啊,可以试一试,我告诉你。对吧。你还得判断这玩意儿是不是集合,如果集合的话,你还得创建一个集合,再往里放数据。啊。你注意这玩意儿是T。这玩意儿T,它不是杰森或map那么好用,我告诉你。它是T。啊,它是T。嗯。好。
22:00
这个是第一个connection,第二个语句。没毛病吧,好好。那。还有。啊,但是这个点呢,大家就不太能想得到了啊,我就跟你说了,还有两个参数啊,你不太能想得到啊,那为什么呢?因为这个地方由于我们用了泛型T,那这个里边我们是不是要构建这个T对象,然后呢,把查询到的,哎,比如说这个搜索语句查询到一二。这个。四四行数据,我们呢,是不是要把每一行数据构建成一个T对象,然后加到集合里边。对吧,我们是不是要在这里边去创建T对象啊,对吧,我们得有一个T对象,哎,他跟我们之前写的那个工具类里边用到的泛型可不太一样,这个地方我们用到的泛型对吧?这个地方呢,这个T对象是系统帮我们构建的。
23:04
你给个泛型,诶,他帮你构建,你直接用这个T对象,而当前我们这个工具类里边,我们要去创建这个T对象,我们自己要去创建T对象,你光有这个泛型不行,所以呢,要有一个CR。大的。Class对象T。这个东西要有,这是帮助我们构建T对象的。啊,你光有泛型不行,你得有这个大的类型才可以啊,因为以前呢,在这边你用的时候,它是有这个对象,有这个对象呢,你能获取到这个类类型对吧?诶可以拿到,但现在呢,你光有泛型不好意思不行。不好意思,不行,OK吧,这不行好,那还有一个东西,还有一个东西。还有一个参数,我们也要给一下啊,什么东西呢来看啊,这个点呢,嗯,没有人问过我,咱们班没有人问过,我在其他班上课的时候,至少有那么一两个同学问到啊,那或许呢,是咱们班学的比较好,应该都知道。
24:10
对吧,所以呢,没有人问啊,来看什么点呢,来注意不知道的同学啊。你居然没有发现这个事儿,我一直在这等着,我以为有人问有人问啊,没想到到最后没有人问,没有人问过这个事情。对吧,我记得咱们班是没有的啊,什么事呢?来看这张表,Table process。这张表呢,里边s table think table think columns think PK用的是什么?用的是下划线命名方式,对吧,来。这我用的是什么土风?我用的是头风。而且。在我们的函数里边这个table process function在这儿对吧,看这啊。
25:02
Process broadcast。接下来在这一步你看啊。我们直接提取杰森数据,然后呢,把这个after提取到。阿,在哪?在这after呢,是一个杰森格式,这杰森里边呢是下划线,下划线下划线下划线直接转为table process。直接转为table process。对吧,而table process呢,用的驼峰啊,没有人关注到这个点,咱们班啊,或者说呢,就像我说的,咱们班呢,学的特别好,都知道这个事儿啊,知道这个杰森转化对象里边,他自己实现了下划线与驼峰命名的互相转换。啊,那我只能这样认为啊,没有人问对吧,没有人觉得奇怪,在so课里边用的下划线对吧?在我们的。招聘里边用的是驼峰啊,没有人问我这个事儿,那没关系啊,最后一个点呢,就是这个事儿啊,就布隆。
26:04
玻璃。对吧,括号类型啊呃,那接下来呢。开。哎,那我们是下划键啊,On the。下关命名方式,To camel。呃,就是最后呢,给一个参数,你要不要把这个下划线命名方式转化为驼峰,因为在数据库里边一般呢都会用下划线命名,而在Java里边,对于Java聘的使用一般都用的是驼峰命名。对吧,就命名方式,你要不要做这个转换,对吧,我们给一个参数让用户自己选,你也不要定死了,就必须转这个也不好,假如说我这个招聘呢,我我就是写的什么,我就是写的下划线,你不能说不行啊,对吧,我我就这样。我就是这个。
27:01
对呀,我就非得写他也可以呀,对吧,我我也能行啊,所以呢,你让调用者自己去选择,这个事儿你不要给他。定死了,说大家都转或者大家都不转,那不行对吧,我搞一个参数传进来,那这样的话更合适一点。对吧,啊更合适一点啊,是这个意思,好,那这个是我们所封装的这个工具类的参数这一步。OK吧,就搞定了啊那这。
我来说两句