00:00
好,那么下边呢,我们来写这个贝斯。贝斯do呢,这个意思就是说它是我们do的一个积累啊,Do是啥我就不解释了啊,数据访问对象啊,这么个意思啊,就是说我们持久化层的这个类啊,通常叫这个面,它是我们do的一个积累。呃,然后呢,这个这个他其实我们写的话啊,我们如果声明这个类的话。我们可以先把这个类呢给它建出来哈。嗯。他其实它所属的包呢,应该是。也不属于API,也不属于这个音跑哈。他就在do这个包下边啊,贝斯丢。完了,他呢,我们应该给他声明一个泛型。哎,在这儿呢,这个声明一个泛型,我们需要解释一下,这个泛型是啥意思啊,给大家说一说,呃,一方面呢,这个泛型就代表我们当前。
01:01
Do方法,要操作的实体类的类型。哎,我们说face do。这个类啊,它是所有DA实现类的基类,也就是负类啊,呃,Do的API,也就是它的接口呢,是定义它有哪些功能呢,实现这个接口来实现这些功能。然后实现功能呢,从父类这继承一些通用的方法,这样实现起来呢,就会比较方便啊,然后这个泛型呢,就是。每一个。其实也并不是每个do方法都会用到这个泛型啊,就是说在do方法中。呃,用到这个泛型的时候,它代表呢,我们就是这个,呃,世界类类型。啊,这个泛型就是就简单写啊,就实体类的类型,我们这实体类现在不就这俩吗,一个是emp,一个是meor是吧?啊。
02:05
然后呢,这是。呃,我们在这儿哈,咱们来给他这个也截个图啊,这个说这是我们贝斯迪所在的这个位置。就不讲那么多了哈。哎,对,然后呢,这个关于泛型啊,我们一方面呢,是从这个泛型本身这来说,另外一方面呢,咱们来写一个查询单个对象的一个方法啊,把这个泛型呢给它用上,咱们就更啊进一步的更清楚的知道这个泛型的含义了。要想写一个具体的方法呢?我们需要先拿过来一个东西,叫做corner。
03:10
哎,又一个空re,这个呢,字面意思不就是这个查询运行器嘛,啊,这是我们DB给我们提供的一个,呃,操作数据库的一个封装好的一个对象啊。这样可以简化我们GDBC的操作,它其实对应的呢,就是我们这里边儿的这个包啊。Common d啊,就是它。嗯。啊,它就是我们说这个,呃。DB us工具工具包啊,工具包提供的数据库操作类。啊,或者叫做数据库操作的对象。然后呢,下边咱们声明一个方法查询单个就象啊它那它返回值方法返回值就是T,哎,我们叫做get一个single r。
04:09
先return一个闹,那得给他传一些参数啊,你像这个需要传给他什么呢?SQL语句你得从外边传给我。然后呢,SQ语句的参数,比如说你是不是根据ID去查的等等啊,这个参数你得传给我参数,我也不知道你要传多少个,我也不知道你是什么类型的,所以说呢,我就得写写成这个。啊,可变参数把这俩传起来。然后呢,我们这个runner的query方法。库方法啊,他看来一共就是这几个啊,我们看了一边,我们用哪一个,呃,数据库连接,我们得给它传进去,呃,然后这个搜Q语句这个传进去。呃。
05:04
Result set handler对,我们得传一个result set handler啊。连接。搜狗语句result handler参数。嗯,看是不是这个哈。数据库连接,呃,搜狗语句。呃,这个是我们result set handler,然后这个可变参数应该是用它哈,这个反正这也这也不显示,呃,在此之前呢,来获取数据库连接。我们GDBCU。Get connection。Jdbc u点,哎,这个不是它哈。我们这个GDPS啊,Get connections get connection拿到这个对象从这儿呢给传进来,这是一个搜狗语句是一个。
06:08
然后呢,Result set handler。这个玩意儿我们看哈,它是个接口啊,你还不能去拗拗它啊,得去找一下它的这个时间类。Ctrl n set handler。Ctrl alt加B哇,它的这个实现类很很好多啊。这里边我们看到有一个叫做B。哎,他呢,应该就是一个单个的啊,单个的这个一个对象,所以我们在这儿呢,用用一下它的这个,呃,代表单个。啊,查询单个对象的一个这个b handle。在这个并handler里边呢,我们去传入这个参数。啊,传入这个参数。嗯,对,这个得传一个什么参数啊,就是代表当前时间内的这个参数,也就是说呢,在这儿还得再再设计一个参数啊,就是class。
07:08
T,哎,这个就是entity class。当前实现类的class对象啊,从这给传进来。然后后边呢,是传我们的S。哎,调这个方法啊,他这儿也是需要有异常的需要去处理,我们呢就都给他们呢,放到一个TRY开始final里边。爸爸呢?哎,这个runner方法哈,它会有返回值,你看返回的呢,就是我们要查询的这个单个的这个对象啊呃,这个就是我们要返回的这个N。我们可以在这呢,给他return一下这个ad啊嗯。或者你直接我们这儿就直接他就得了。
08:07
然后如果如果抛了一场,还是那句话,不要不要掩盖问题啊,我们这个时候呢。哎,如果真的抛出异常,则。将编译时异常封装为运行时异常,抛出我们去尿一个runtime exception。哎,如果这边其实,呃。对,就是如果正常的话,就从这儿就return了,如果抛一长的话。最后这边return呢,也只能return一个脑了啊,所以这个东西咱们。这个就保留吧,啊,这个这个其实要不就得还得把它的变量拿到外边去声明,这个代码就比较复杂一点。
09:01
还有这里边儿需要注意一下。啊,还有一个点需要注意,我们在这儿呢,获取了数据库连接,但是呢,释放数据库连接不在这个方法里边做。啊,为啥呢?嗯,前面这儿我们说过哈。看我们的这个。哎,Filter里面。Filter里边,在filter的final里边是统一释放数据库连接的,所以我们这儿呢,这个具体的do方法里边不释放数据库连接。啊,你想呢,我们。拿这个图来看,比如说你这个do方法,如果把数据库连接给释放了,这儿我用用的又是同一个啊,结果我用的是一个已经在数据库连接池里面标记为空闲的数据库连接,这你肯定后边就没法没法玩了。啊,所以在这儿do方法呢,不能释放数据库连接,数据库连接呢,是在filter里边统一去释放的啊,这个一定要去注意啊,在这就不要多写一步了啊。
10:01
哎,这个方法呢,是查询单个,哎这项。呃,传circle这个参数是吧,这个就是执行查询的circle语句。下边class呢,是实体类。对应的class对象。啊,是这个是要传给我们circle语句的。参数最后的返回值是查询到的实体类对象。然后我们这儿呢,我们来看一下啊。泛型在这儿定义的,在这两个地方呢,是传进来的。哎,然后呢。嗯。我们把这哈,这个部分呢,咱们截个图啊,给大家指一下这个对应的关系哈。这样的话,我们就非常确定这个范型的意思了。
11:08
这声明反省。这声明犯省。然后呢,我们下边。啊。这个地方。这其实是这个括号,间括号里边这啊,准确说是间括号里边这个。是我们在这儿去使用泛型。哎,包括我们这个地方啊,都是使用这个扇形。它们的含义呢,就是代表当前的这个世界杯。
12:13
好嘞啊呃,声明反省下边这儿这两个地方是使用犯省。好嘞。嗯。这再补充一下啊,声明泛型呃,含义是代表实体类啊类型。
13:02
因为因为要。这里边儿用它代表世界杯类型啊,才会把这个范型给传进来。
我来说两句