00:00
行,那么我们现在已经迭代到这个方式四了,按说已经算是比较完美了,但是还不行,嗯,再干什么事儿呢?你看我们现在呢,基本上暴露出来要想获取连接这四个事儿,就是这通过四个字符串来体现的,那么我们通常呢,获取连接的时候呢,这些都是属于一些配置信息了,那么这个配置信息我们最好不要呢,给他以硬编码方式写到这个代码当中。那都是一方面,那一会我们总结好处都有什么啊,那我们应该怎么办呢?把它写到一个配置文件当中,然后我们去读这个配置文件,然后呢,把这个信息呢给大家加载进来,这样去做,所以这呢是我们要写的一个最终版,终于出现一个最终版是吧?诶那我们讲这几种方式的意义在哪呢?就是大家你得知道这个代码我们出于什么样的目的去迭代,以后你自己在工作中开发的时候呢,你要想这个代码还可以怎么去写,写的让它更漂亮。
01:01
这其实是一件很有意义的事,但是实际当中呢,你会发现公司当中呢,大家更多的还是说我先把这个事先做了再说,跑完了再说,效率不高再说,后边呢,真就再说了,就是吧,哎,当然你对自己应该有个追求啊,怎么样能让这代码效率更高,然后他这个考虑的问题更更广,具有更好的健壮性,是吧。行,那下边我们就要操作了啊,我们刚才看到说连接呢,需要这四个基本信息,这四个基本信息我们就把它放到配置文件当中,通过加载配置文件的方式去实现连接。啊,这个将数据库连接需要的,诶四个基本信息,诶我们的这个声明在配置文件中。哎,通过读取配置文件的方式。诶获取链接这个呢,就是我们的一个最终版,这个最终版咱们叫一个final版是吧。好,那先得整一个配置文件吧,配置文件的话呢,注意咱们从这个后期讲外部的角度来看,咱们呢要把这个配置文件呢,放在src上啊,因为放在功能下的话,这个配置文件再部署到他开的服务器以后呢,这个文件就缺失了,就不会帮你部署过去,所以这块我们在src项啊,点邮件去新建一个file吧。
02:20
那咱们先不用这个插包的啊,就是就是一个普通的file JD bc点2PROPER,这个呢,咱们习惯上配置文件呢,你像你用property去读的话呢,就用这个点property结尾,这是一种惯例啊好finish,那么在这里边呢,我们去填写咱们获取连接的四个基本信息。啊,四个精品信息,呃,User这个先写谁后写谁无所谓啊,User呢叫root。Password abc123 URL jdbc my localhost 3306test数据库,还有driver,哎,你说我这个名有要求吗?我非得怎么写,或者说想怎么写就怎么写呢?
03:08
我叫Java叫Java class有区别吗?都行,全看你这块读的时候一会用什么了,对吧?嗯,我叫Java class也行,那就是come点。JDBC.MySQL下的这吧。哎,这样写这呢,就是我们说四个基本信息,哎,在这个文件当中,你看我们选中以后,Alt斜杠,它是以这种井号的方式呢,来体现这个注释的,哎,所以上面这块我可以写一个。诶,在这儿我可以写一个注释啊,叫获取。这个写注释,他这还别写了,你也看不懂是吧?嗯,来保存一下行就这样了啊注意的话呢,就是我们这边写的时候呢,一定要左边右边这个等号,不要有空格,这个呢会有歧义,那你说这个密码你是空格ABC123还是说ABC23呢,就不好说了,就所以呢,不要加这个空格,就让他这个挨着这样去写保存回过来我们再去独立配置文件的信息,咱们讲基础已经说过了。
04:14
这是咱们是第一步读取配置文件中的四个基本信息,这个呢,咱们是放到src下了,咱们怎么加载啊,是不是可以通过那个类的加载器,对吧,那我得获取一个类的加载器。这个呢,咱们可以用当前这个类CTRLC。哎,当年这个类点class点,诶get你的class loader这个类的加载器,咱们说有好几种,这个获取到的是哪一种。是不是系统类加载器啊,因为咱们自定义的类呢,是不是都是系统类加载器帮加载的对吧?嗯,然后第2GET resource as stream,指明我们这个文件名,诶把这块选中CTRLC啊粘过来,默认的识别的路径就是src项,所以这样是OK的,然后这块呢,我们就会生成一个对应的一个流。
05:11
哎,这个我们这CTRL1一下。诶,生成一个input stream。啊,然后呢,我们需要去创建一个properties。诶,然后CTRL1得到一个pro,通过这个pro点我们去load,对加载这个S这个文件,那这个有异常,我们把它都先周出去,加载完以后,我们下边呢,就可以去通过pro.get property去读了,这个读的时候呢,就看你当初写的这个时候的key了。这块最好你这块粘一下啊,要不一不小心写错了,这个就拿不到了,这个呢我们就叫做user,诶一次呢,我们去取另外三个。CTRLC。CTRLV啊,不发这个名我们都一样了,就。
06:02
CC。好,这样的话呢,我们就获取到了四个基本信息,OK,获取到基本信息以后,然后呢,第二步。第二步我们叫做加载驱动,通过class.for name,我们把上边你这个driver class放进去,这就叫做加载驱动。可能现在猛一看感觉有点诡异啊,这是光调完完以后啥也没干,呃,因为它里边帮我们做了这个事了。哎,所以我们只需要加载就行啊,然后第三步获取连接。直接呢,Driver manager.get connection,诶ul user password就可以了,然后CTRL一下得到一个链接,打印链接,保存结束。
07:00
就这样读取备软件加载驱动获取连接跑一下。搞错了,写错了com点。Class found,这回写错了吗?JDBC.l点。com.MYq.PBC是不是写错了?说自己写吧,翻车了是吧?嗯,这样子啊,写错了,然后回过来我们再跑一下。可以了。哎,这样我们就获取了一个连接,那这个呢,是我们自己要是获取连接的话呢,咱们的一种追踪方式。这个需要大家清楚。嗯,一般呢,在笔试当中有时候出现过啊,这个频率不算特别高,就说呢,如果我们要自己获取一个数据库连接,你都需要考虑哪些操作,哎,那其实就是我们这里边提到的这几个步,因为真正我们开发中户呢,用的都是数据库连接池了哈,他就问你说你要是自己要写一个连接的话,你需要考虑什么事,就是我们这里边的四个基本信息,需要有这个对应的driver啊,然后呢,需要用户名密码,需要ul就可以了,行,这个呢是我们要选择的最终的一种方案,那我们自然而然的要问这种方案。
08:22
好到哪儿了?好处是什么?暴露的东西少,嗯,你比如说咱们回头呢,假设我要连的不是my circleql了,我想换成另外一个数据库连接,你只需要是不是这里边去改这个事就行,哎,把这个一注释,哎,我们主要呢,你就改一下用户名密码,你看你这块想连的是哪一个,呃,其他的数据库或者说呢,都不是MYSQL了,哎,你其他的比如Oracle,你的这个driverva class在哪?因为咱们没有装Oracle,所以就没办法给大家演示了啊,你只要把这四个基本信息一改,是不是立马呢就切换为对另外一个数据库的连接了,对,哎,那这个时候呢,我们可以理解成此时咱们就把这个这叫数据,这呢叫做代码的话,实现了一个数据和代码的一个分离。
09:20
对吧?嗯,实现了数据与代码的分离,那么其实呢,也是一种解耦啊,实现了解耦就是说解耦就是耦合,就是你把这个咱不是讲这个动态代理时不也提过吗?你这是一个代码,这个代码这个代码,然后呢,你要这块呢,把这个代码相同代码都写到这,这不叫又耦合在一起嘛,咱们当时说呢,你把它单独拿出来造成个方法,但是呢,又跟那个方法耦合了,咱们动态代理呢,说中间这个方法来回可以换,这不就实现了叫解耦吗?哎,就不需要以硬编码的方式给它融合在一起的,这种就要解耦,像这个呢,你这不就硬搬硬编码的方式就给写死了嘛。
10:01
然后这块的话呢,我们这个代码不用动,你要改的话,你去改配置文件,这不就实现了叫解耦吗。嗯,这样的话呢,对我们一个比如说不是特别懂程序的人来讲,其实也是好的是吧,你要是让一个不是特别懂程序的人去改这个信息,他跑到代码这块呢,你让他改,他都有点哆嗦是吧,不敢改,对万一怕改错以后有什么问题,但是你要让他改一个配置软件呢,这个呢还是敢的,你像咱们这个my circle my circle找一下装哪了,咱们前面讲过的啊,MYSQL进来这个呢,你看就有一个配置文件。叫me.I这里边呢,就是它的一些信息,像咱们当时这个端口号使用的这个字符集,看这都有写,其实这块呢,就相当于它的一个配置文件,然后呢,在我们启动这个服务器端的时候呢,它会自动的去加载这个配置文件。啊,就是跟我们现在这个思路是一样的,那包括呢,我们这个eclipse,这个eclipse的话呢,它这块也有一个叫eclipse.ini这里边关于我们初始的一个内存大小啊,最大的一个内存大小,像这个呢,都是它的配置参数,当我们在启动eclipse的时候呢,它也会去读这个配置文件,那对于我们不是特别懂eclipse里边这个代码怎么回事来讲,你只需要呢去改这里边几个参数,它在启动的时候呢,就会自动的实现一个加载。
11:17
也是实现了数据和代码的一个结果,诶,这就我们要说的一个好处。哎,这个就这个好处啊,这个一不小心写了个一,这个还有个二是吧,还有别的好处吗。可一致性啊,可一致性呢也行,其实也可以看成跟这个一样,呃,就是我们这块呢,其实可一致性主要是我们获取的数据库连接,你可以从这个切换成另外一个对吧,那就是通过改数据的方式。诶还有一个呢,其实这个大家不容易想到啊,咱们这个程序在写完以后,真正我们要把它部署到他们盖的服务器上,或者给他这个部署这个程序的时候呢,我们都需要把咱们写这个Java代码呢,给它打包,打包呢就是到对应的这个jar文件了啊,就是咱们现在这个叫JA文件啊,这个实际上我们这个web程序呢,打包就不是这个这了,就是总之呢,你需要编译,编译完以后的话呢,把你编译以后的程序呢,需要部署到这个服务器上了。
12:20
嗯,那你想想,如果我们要对这个获取连接的这里边的某一个参数,假设就这四个其中的一个要进行修改的话,如果你要选择的不是这第五种方式,假设是第四种方式,我们想改一下这个数据库,你改这个数据库就意味你这个代码要修改,那就意味着你这个类呢,是不是要重新的去做一个打包,你要重新打包这块呢?尤其你这个工程可能还比较大,因为还有其他的很多类嘛,你是不是就得重新打包,需要花一些时间。而我们这个文件呢,在打包的时候呢,它还是以一个文件方式在存在,如果我们选择是这种方式呢,诶获取的连接你这块呢,说要改一个参数,其实呢,你只需要呢,把那个文件呢替换一下就行,打包的那个程序呢不用动,也就是说呢,这种方式呢,如果我们要修改配置信息,不需要对原有的程序重新打包。
13:16
哎,这样个原因啊,说如果需要诶修改啊配置文件信息啊,就可以避免啊,这个程序重新打包啊,这个打包呢,花的时间还是比较长的,诶我们只需要呢,替换一个文件就行,程序因为没有变嘛,还是这个程序,所以就不用重新打包了,哎,是这样的一个情况啊,这个咱们经过后边呢,你才能够了解或者更深入的懂这个事儿啊,这个呢,就是我们获取连接的五种方式,那么如果说我们如何自己去手动获取一个数据库连接大家呢,就要说这种方式,这就是一个最终版。
我来说两句