00:00
好,那我们要去封装一个工具类叫。Phoenix YouTube可以吧?哎,或者说咱不叫Phoenix YouTube,我写什么呢?叫GDBCU。啊,接力VC要求。这个东西呢,要封装成这个样子来,注意看啊,我们写一个注释。啊。我们要把这个东西封装为。封装为,就是任何JDBC的。数据库。任何JDBC数据库的。任何。查询都可以使用该工具类的方法。这个就厉害了,对吧,注意看叫任何。啊,叫任何。
01:02
对吧。啊,那我们就要想一想了。思考一下对吧,这里边儿。Public。Static。啊。返回值写什么类型呢?对吧,我们要应对的是任何数据库的任何查询啊,当然任何JDBC数据库啊。那想想看,你觉得这个地方返回值类型咱们写什么比较合适?
02:03
对吧,啊想一想。思考一下咱们应该用什么样的方式能更好的来表达它的结果,因为这个地方咱们所写的返回值。那不就是查询结果的一个封装对不对,咱们要写的是对查询结果的封装,没毛病吧,对吧?那我们就来思考一下,正常的一个JDBC数据库,它的查询结果有哪些种可能性,对吧?就种类上的可能性,那传结果那就太多了,对吧?就是我们说把它归个类好,那我们呢,其实可以归为四类啊,你要能把最复杂的搞定就行了,对吧?第一类是不是这样的,叫select。抗的心。From。T表。对吧,这是一类,这个是属于什么呢?叫单行。
03:00
单列。对吧,它就是一个孤零零的一个值,你发现没对吧,那这种是最好处理的,你肯定不用考虑它,对吧,它肯定是最好处理最简单的结果类型吧,对吧?好,那第二类是不是这样子的来看啊,叫select。啊,现在什么东西呢。嗯,假如说心吧。From。T表VID等于。1001。啊呃,我们加一个注入说明ID为主键。为主见好,那第二个是什么情况。第二个是什么情况?第二个是。单行。但是是。
04:01
多列,你发现没好,那第三种情况大家应该就知道了。第三种情况。心from。T表。对吧,啊from体表,然后呢,注意啊,Go back。啊,比如说t midd对吧,随便啊部门ID也好,什么东西都好对吧,那这个是什么情况。诶,那t m midd呢,有多个你看得清了,但是呢,我就一个类对吧,那这个是。多行。单列。对吧,好,那最后还有一个,那肯定是多行多列,多行多列呢,这个serve也好写,谁select新from t啥也不要了,对吧,这个呢,就是多行多列。对吧,那我们所有的circle你随便写你都跑不了这几种对吧,那我们肯定要。
05:00
能把谁就是这个返回值,谁要能表达,能表达它。其他的是不是都可以啊,比如说能把这个装进去,那其他的都可以啊,对吧,那你想这种多行多列的一个情况,我们对这个类型,就是返回值类型,我们应该用什么。我们。可以接收。多行多列的一个。情况。对吧。那我们想啊,它有多行,它每一行是不是格式是一样的,因为JDVC它是属于这种叫什么结构化的一个数据,对吧,它的每一行是不是一样的。对吧,结构是一样的吧,啊也就是说呢,我们现在要把这样的一个数据放进去。啊,比如说ID。Name可以吧,好,那这边1001啊张三,然后呢,Mail。
06:04
好,这边是1002李四对吧,然后呢是好,那这边1003王五对吧,Ma啊,比如说啊,类似于这样的一个数据对吧。那我们现在呢,要把这个多行多列的数据,能用这个表达式给它表达了,对吧,那你看多行每一行数据结构是不是一样的,那我们完全可以把这个东西封装成一个什么集合,能不能明白。对吧,集合,集合里面每一个元素,那就是什么,每一行。对吧,那比如说你查询结果是这三行,那我集合里边那就三条数据呗。对吧,这种东西肯定要用一个集合来放的啊,那多行对吧,那多列。多列就是写在我们这个情况,ID namex对吧,多个列,那这一行数据在集合里边,我们应该用怎么放呢?是不是类型啊,这个类型写什么比较合适,大家想。
07:03
对吧,集合,我们要给定集合里边所写的这个数据的类型,那你为了能表达所有的。数据的情况,那我这写什么合适啊。大家说我们写什么比较合适?首先,我们考虑多行多列。诶杰总说map map可不可以啊,那当然可以啊,比如说这里边我就可以写ad对吧,1001。对吧,好,第一个元素,第二个元素name。张三,对吧?好,第三个元素是sex mail,搞一个map可不可以啊,可以啊,那谁更好呢?谁最好?你觉得大家觉得就是这个地方,我们写什么最好?
08:01
对吧,我们想的是这样。呃。陈总说那个。切森。啊,用杰森格式,呃,那为什么杰森比这个map要好一点呢?你觉得杰森比麦要好,对吧,为啥呢?我觉得杰森跟麦差不多吧,其实更好一点的是不是还得是杨总之前所说的,这里面放一个什么发型?你想想看,放一个泛型是不是更好一点,为什么放个T啊?放一个T,因为杨总之前说了泛型集合对吧,放T最好,因为放T的话,我想用map的时候我就用map,我想用杰森我就用杰森,假如说我已经封装好了一个叫user的招聘。哎,那这刚好里面有ID namex,我用user的这个Java并这个类型可不可以用自定义的类型可不可以。
09:00
是不是也可以?能明白吗?其实在我们这个地方而言的话,其实最好的就是谁呀。T。对吧,用泛型。是不是?能明白吗?对吧,我们把每一行数据啊,封装成一个泛型对象。OK吗?比你map或者杰森是不是都好一点啊,因为我们要的是最最通用的方法吗?对吧,所以我们要用泛型这一块能听懂吗?因为你看为什么我们考虑的主要是考虑它,其他不用考虑,你看比如说我这边采用了list加了一个泛型,那么对于他来说。多行单列,比如说我只查了一个ID。对吧?或者你查了个CT对吧?你的别名叫CT可以啊,我集合里边对吧,我有CT指向ECT指向五,CT指向八,对吧?可以啊,完全可以对吧?好,那这个单行多列呢?那无非就是说我这个集合里边只有一行数据呗,因为你单行对吧,我集合里边只有一行数据,我能表达吧,那单行单列也没问题啊,我集合里边也只有一行数据,而且这一行数据。
10:16
就长这样。CT直接等于一啊或者十对吧,类似于这样的一个情况,那我只要能把这个东西能表达了,其他的三个是不是都可以表达出来啊,那我们说的这个地方写成。T。有没有问题?能不能明白?好,当然这个之前我们提到过,如果你要写这个泛型方法对吧,那在这个T前面,在不是在这个返回值前面要声明一下这个什么。发型对吧。
11:04
这个地方有没有问题,当然了,你为了不报错,那这边呢,你有一个list。里边写T对吧,二加V得到一个结果list啊好,那最后呢,把这个list怎么做一个返回对吧,先让这个方法它不报错,这一块大体上啊,就是我们关于一个返回值的说明,大家有没有问题。对吧,那这个东西怎么来的,对吧,因为我们要写的是非常通用的一个工具类方法。对吧,所以我们就把。所有的查询的可能性的结果类型的可能性给列出来了,对吧,通过这个角度来给大家说明的,其实我们用一个list t就好了,对吧,好,那接下来参数。你说这个参数我们应该传什么呢?
12:12
就是大家觉得这里边参数我们要放什么东西呢。想一想啊,我们要应对任何JDVC数据库的任何查询。对吧?啊,那你说这个参数我们应用什么。
13:05
嗯。连接肯定要有吧,啊circle,对了,那肯定这些东西要有吧,首先连接肯定要有,对吧,你要不传链接,你要在里面构建连接,你那你得传什么,你得传这个。Drive对吧,驱动URL你肯定要传,因为你要不同的数据库啊,对吧,所以最简单的方式传什么传连接。对吧,第二个就刚才提到了sol语句,对吧,你肯定从外面传进来,因为你要应对的是任何查询,那我怎么知道你这个任何查询包含什么东西呢?那你得告诉我搜狗语句。这两个能明白吧。对吧,一个连接一个S语句。啊,一个色语句。对吧,这两个肯定要有,这两个没有问题吧,对于大家来说,对吧,你要应对的是任何JDBC数据库的任何查询,所以这两个东西肯定跑不掉,对吧?好,那接下来东西对于大家来说呢,可能就不太好想了,就不太好想了,对吧?因为这个里边我们要跟大家说明啊,第一个,呃,其实我们还要几个参数,但是这这两个参数呢,大家就不太好讲了,我们就直接来说了,好吧,就给你解释一下什么作用。
14:21
那这个里边我们等会儿呢,用连接去预编译这个circle,然后去执行,没毛病吧,进行完之后呢,我们得到了一个结果,然后编译结果,把结果要封装成这个。T对象对吧,但是呢,现在我们只有一个泛型,不好意思,我们封装不了这个T对象。啊,封装不了对吧,那怎么办呢?我们要有一个T对象的类型。我们要有这个类型才能构建这个T对象,因为你在这里边,你要不然没法写T,没办法构建这个T对象,对吧,这个是用于构建T对象的。
15:07
啊,这个是用于构建T对象的。好吧,还有一个参数,还有一个参数呢,我要给大家说明一下,大家可还记得这个东西。来看啊。在这个。Table process。对吧。好,呃,没咱班没有人。说这个问题啊,你看之前咱们是不是把这个里边读出来封装成了table process对象。记得吗?对吧,但是你有没有关注到一个问题,没有同学注意到这个事儿啊,来,我给你看一下,我现在给你摘出来。找到我们的table process对象在这儿。
16:00
看啊,这里边有个什么点呢,大家没关注的之前啊。看我们表的列名,命名成什么叫source type。Think table对吧?啊,Table s table s columns用的是下划线。下划线对不对,那这边呢。用的是驼峰命名,而我们直接看啊,当时我们怎么写的,在哪啊方这对吧,呃,Table process function。在这个地方我们把它。After取出来直接转化为table process,我告诉你,它不是通过位置,它就是通过名字。对吧,那也就是说那名字不一样啊,这边是下划线命名,这边是驼峰命名,那因为他自己做了一个转换,所以在这边我们也要做这事儿,因为其实在S里边啊,在数据库里边往往都用的是下划线命名,而Java并里边往往用的是驼风命名,所以那这边既然写了T,那未来是不是有可能是一个招聘。
17:07
对吧,那你就对应不上了,那不就出错了吗?嗯,所有的列都关联不上对吧,所以这边呢,我们搞一个布尔类型。啊,布尔类型好吧,那it's。啊,或者说直接叫on the。On the score to came。好吧,下划线到驼峰的一个转换,你要不要转换。啊,那你就看你自己,你这个里边呢,我们肯定写判断对吧,如果你传的参数为true,那么就转换,如果它不是出,那么就不转换。对吧,啊,这个点我们也去做一下,对吧,因为我们尽量的追求这个通用嘛,其实你越追求通用,你从外面传的东西就越多。对吧,你要是在里边写死的东西多,那就可能就不那么通用,它就专用性,专用性比较强对吧?好,这是我们构建的这个方法就搞定了,这两个参数能不能理解,前面两个不多聊了,就不用多说了,对吧,因为主要是任何JDBC,任何查询,对吧?所以这两个东西后面这两个能不能理解。
18:18
现在能不能理解,能理解给我扣个一好吧。能不能理解?对吧,因为我们要封装T对象,所以呢要有一个大的T的队形,对吧?啊另外一个呢,就是驼峰跟命名的啊,就命名方式的一个转换。Table process,对呀,Table process里边咱们用的是什么?用的是杰森的,他如果没有转换,那么跟我刚才说的他不就关联不上了吗?他们就匹配不上了,对吧,他这个地方人家是杰森这个里边做的这个事情懂吧,咱们呢是自己要准备做,因为我们自己写的这个代码嘛,所以自己要搞定这个事儿啊好,那我把这个解掉。
我来说两句