00:00
那这个总结完以后呢,咱们下边呢,就来写一个针对于不同表的通用的查询操作,哎,刚才呢,咱们这两个所谓的通用呢,还仅仅是针对于各自的这个表,所谓的通用呢,只能说你这个字段有的多了,有的少了,仅此而已,那现在我们还得写针对于不同的表的了,所以这块我们再去新建一个class,哎,我们还是用prepared statement来做的啊,哎,使用它来实现一个叫query啊的一个测试。好,这块我们来描述一下啊,说叫使用prepared statement,这个接口还挺长的啊,刚开始写的话呢,不好写,写着写着感觉写熟了再写的话呢,就像想吐了是吧,太长了啊,使用prepared statement来实现针对于不同表的通用的查询操作,诶,来做这个事情,好,那下边呢,咱们就来了啊,诶首先哈。
01:00
那么下边一写就该写返回值类型了,那得写啥呀?那一会呢返回customer,一会呢返回order,那这个呢要写通用的,跟他说object,但其实object呢不好。这个你都不知道它到底是什么是吧?嗯,咱暂时先写成object啊,先接着往下写,然后这个方法呢,我们先获取一个对象,这个就叫get instance,哎,获取一个实例了,好,这里边,那咱们刚才写这两个操作的时候呢,里边其实都涉及到两个参数了啊,一个是string的circle,一个是object,这个可变形参,这个肯定是必须的,拿过来就是你写这个circle控呢,你到底是查哪个表的,那这个查询语句是什么?诶填充张一,这都是必须的了。啊,肯定得有啊,这张我们写上了,写上以后,那接下来怎么写,那咱们呢,先拿其中一个粘过来看一看啊,咱们刚才写的这个呢,是拿卡来说的,那我们把这呢从上往下拿过来看看哪些呢?位置我们还不够通用,咱们就给它改造成一个通用的ctrl c ctrl v ctrl shift的F,好从上往下捋啊。
02:10
这个获取连接没问题,填充障碍符,呃,不是预编译SQ语句生成prepare statement填充障碍符,这时候你想的时候呢,一方面你想customer这个表,另外呢,你想一下order表,就看看是不是足够通用,对吧。没问题,诶执行查询,然后呢,得到结果集获取结果集获取这个列数啊,这都是动态获取到的啊,这都没问题,然后呢,我们是一条数据是if.next方法,这是不是有问题了?嗯,现在我们需要创建的不是一个customer了,而不知道是哪一个类的对象怎么办?或者换句话说,这个位置你造的这个对象,实际上也就决定了我们这个返回值的类型,对吧?啊,那这块呢,我们既然要写通用的了,你不能直接拗拗的话呢,一看编译手指不就暴露你要造的对象了吗?
03:04
那是不是又得反射了,哎,就替换掉它,那要反射的话呢,我们你得告诉我是哪一个类,我应该造哪个类的对象,所以呢,你是不是告我这个类就行,哎习惯上咱们就写成第一个参数了啊,哎这样,那这个class的话,咱们知道它不是都有泛型吗?带T吗?那回过来呢,我们这个呢,我这写个T,我这个T是不是就决定了我们返回的这个对象就是T类型的了。你这带泛型参数了,这个编译器会认为你是有个类交题吗?不是我这是泛型参数,所以我们这个方法呢,就是一个泛型方法。就是这个意思啊,再来一下啊,就我们现在呢,要生明class,咱们现在非常确定的就是你是某一个具体的类,那这块呢,我们这个T,想想咱们当时用反射的时候呢,这个T不就是你对应的这个运行实类吗?哎,那你这个T是谁?比如说是customer,是我们order t就是这个,那你对应的这个反回值类型不就是T吗?诶然后这个T呢,不是一个类啊,是一个参数,所以我们这就是个翻译方法了,这样写好,这有来这个class了,然后呢,这块呢就不要这样写了,怎么写class点,哎,Newce吗?咱说这个方法呢,是任何一个类,咱们在提供一个扎宾的时候都提过,说要提供一个空餐的public权限的构导器,就是在这呢,我们要通用的去用它啊,那前面那块呢,我们怎么声明是不是就提了一个小T啊?
04:37
说诶不清楚不清楚,把它删掉,放这CTRL1对吧,加T吧,就是你这个方法里边呢,是不是这个返回的这叫T,这个T呢,就是由你这个当前类决定的嘛,哎,这个咱们不是这了,就找你上边这个刚才声明的位置。哎,咱们上面声明的时候,那个T是这是T,所以这个返回的这不就是T吗?这个啊好,这个就是T,这个T其实就是我们要返回的这个对象吗。
05:06
那那关键就是我们这里边呢,需要给这个T的属性赋值呗,然后呢,下边接着走,诶,动态的去获取你到底有几个列,动态的获取每个列的值和每一个列的别名,然后呢,通过反射动态的去获取这个属性,然后呢,动态的去赋值,全部都是动态的来返回T,然后最后呢,Return now,这个就相当于你要是没查到数据,我就给你return是不是就写好了。就这样写呗,所以这里面的区别呢,就是我们要造的这个类的对象不确定了,我们用class来替换一下,OK,写完了啊,来测试test啊,叫get一个instance。嗯,在这里边先保存一下啊,嗯,然后第二列方法,嗯,第二个方法我们需要传相的这个参数,比如说我们先来查询一下,这个还是针对于customer啊,那我就customer第2CLASS逗号传一个circle。
06:07
Select,这个我们查一下ID,查一下name,查一下email,诶,我就不写那个Bo了,From这个你想查几个字段就查几个字段,Customers where,这个叫ID,等于这个我们填一个占位符。好,把色扣呢扔进去,后边呢,张一福。嗯,这图针对于customer这个表,哎,再挑一个表12,诶这写个12好,这块CTRL1自动呢,就给我们声明的这个是一个customer了,那因为这块我们用的是这个反类型T了,打印customer保存来测试。哎,出来了,哎现在呢,是针对于这个customers这个表的,那换一个表,哎,随身形的一个CIRCLE1,哎换一个select,这个叫order,下角线ID order name,这个我就查这俩字段,Order where an order,小写ID,在这里填一个占一符。
07:12
这样,然后get instance,诶这呢针对是order这个类的,诶CIRCLEL1,哎然后呢,这个参数这我就写个一了,然后CTRL1,诶剩下的就是一个order,诶打印一下order,诶这样写有问题不有问题对,因为这块呢,是不是没有使用这个边名啊,诶这时候我再去这个order表里边找这个order下ID是找不到这个属性的,跑一下看看啊走诶就是上面这个呢,针对你这个customer,这个是没问题的,下边这块又出这个问题,所以这块就我们说的啊,一定要呢把这个别名起上。哎,那个好再来。又报了,说这个order ID,说no such element ID,嗯,没有ID吗?他这看是哪一行报的啊,这个我们是在这没找到,然后get instance是我们这个点一下在这啊,Get declared column labor。
08:16
对,这这class里边找的不靠谱的啊,所以这块呢,应该是给我们这个叫替对象是吧?嗯,那这时候我们改怎么改对吧,这不就行了吗。哎,这就行了,哎,所以这个测试呢,你发现还是必要的啊,你不测试的话呢,这里边一些小问题的时候发现不了,哎,那这时候呢,你最好再回过来看一眼啊,这时候我们关于这个对象这块呢,是用的这个class来表示的,创建这个对象,然后赋值,诶这个呢,去找指定的属性,这个注意着是用这个class。好,这样就我们通用的来获取一个对象的方法,那一个对象方法能获取到了,那能不能获取多个对象构成的一个集合。
我来说两句