00:00
好,接下来呢,我们就先来整合最基本的JDBC与数据源,我呢创建上一个新的项目,你有一个project,我们还是使用初始化向导,那现在呢,报名点硅谷。现在呢,我们是第六章内容,那我就。Boot杠零六。来数据访问,我们先使用JDBC好,打包方式呢还是炸包的方式,把这个包名我来改一下。好,Next下一步来选中呢,我们使用spring boot1510版本,那我来选中我们要用的场景,首先呢,我们要跟数据库交互,我来选中circleql circleq呢,第一个我先选中my circleq,这个my circleql呢,它其实是帮我们来导入my circleql驱动的,第二个呢,我们使用原生的JDBC,我们就来先选中JDBC,那后边使用买使用GP,我们再来选中相应的内容就行了,为了演示方便呢,我也把外B模块来选中,好,我点一个next下一步。
01:10
我们来创建我们这个项目。好,我们就在这个当前窗口打开,首先呢,我们来看我们这个po文件里边来,我们引入的是什么呢?我引入的是starter jdbc及start web,包括呢,我们引入了MYSQ驱动,然后我们来使用最基本的。接DBC的时候呢,我们就引入这两个模块,一个是接DBC,一个呢是马SQ驱动,我们让它自动导入。好,我们把这个呢记录一下场面。好,那接下来呢,我们就来看我们需要如何配置才能跟数据库交互呢?我先来启动,我们先连上我们之前的数据库。
02:00
好,我们就连上我们虚拟机呢,这个数据库,当然这个虚拟机呢,我已经在这儿启动起来了,好启动起来以后呢,我们用这个客户端连上。那现在连数据库呢,我们来看,现在这是停掉的,因为我们这个虚拟机,我刚启动我们这个docker,我还没让它运行我们这个马容器。我们把马启动起来。来我们docker PS-A,我们看到呢,我们这个这三个MY,不管是零一零二零三都是没启动的,那就来doer start来启动上一个MYS,那就来启动我们这个MYSL02版。啊,回撤,我们这样马SQL02呢,我们就启动了,然后我们3306,哎,我们现在就连接上了,好,那我们这个数据库启动起来了,我们要怎么样连上数据库了,哎,有了spring,我们只需要来写相关的配置就行了,那我们来到src慢resources下,我就在这写配置啊,我们经常用prior,我们今天再来用一下压面文件,好我就来写一个application,点二压面来我们用它作为配置文件,写什么配置呢?我们这一块有一个叫spring,点我们来看有一个叫data source数据源,然后呢,Data source里边有一些属性,比如我们连接数据库要用的username,好我来写上,比如我们的password,诶。
03:30
Pass word我是用第二个123456,再比如我们要连着URL地址,哎,URL地址呢,我们专门来给我们创建一个测试库,我们来在这儿新建一个数据库。我们就叫呢JDBC好字符集呢,我们让它用它自己默认的就行了,好我点一个确定,那么我们就连上它来操作,我在这配置URL,那就是JDBC冒号,My circle口冒号,哎我们写上IP地址1922.168.15.22,然后呢,3306端口框,我们连上JDBC数据库,包括呢,我们这个驱动的类名,这专门有一个呢,叫Java class name,那就是com,诶MYJDBC,哎我们就是用这个驱动,那这么一配,那其实就算是好了。
04:27
我们呢,可以来测试一下,我们来到这个test类里边,好,我们呢直接让他把这个数据源注入进来们看到这一块配的是跟数据源有关的,好,那我们就data source。那这个data source呢?我们让它自动注入,我们看从容器中拿到的这个数据源是什么?输出一下out data source点。Get class我先来看这是什么数据源,再来呢?我们从数据源里边拿一条链接,看能不能拿到我们这个连接。
05:03
英特尔,好,我们把这个。异常抛出去。我们在控制台呢,把这个连接打印一下,我们看是不是能获取到这个连接connection,然后呢,我们再来把连接关闭。好,我来测试一下,走。好,我们看这个控制台,我们看到呢,这一块正在启动。数据源呢,他用的是这个叫JDBC啊,它是to source是Tom k。他用的是他们K数据源,而且呢,连接呢,我们看到JD bc connection也能获取到,所以说呢没问题,那我们说这种配置的默认规则,那就是这样,我把它复制来,哎,我们想要访问数据库。只需要做一个简单的配置。
06:02
就行了。好,就是这一块配置,那么配置的这个效果啊,效果默认是什么呢?哎,默认使用使用咱们这个什么数据源,是使用的是我们来看控制台打印的这一块,它使用的呢,是我们这个tomcat JD bc数据源。它作为数据盘。那默认是使用它的,包括呢,我们这一块的配置,大家可以看它是spring JD bc,我点进来点进来,那么其实呢,就是跟我们这个类有关的配置往上翻,哎,数据源的所有配置都在data source properties里边参考。数据源单。的相关配置都在这个里面。那为什么会是这样的效果,包括呢,我们可以自动装配到数据源,而且呢,从boot默认使用Tom k的这个JDBC连接。
07:12
这一块的原理呢,我们来打开我们这个自动配置包。Auto con org好来主要呢,找到跟我们这个数据源这一块,有一个叫JBBC,我们看到这里边呢,都是跟数据源有关的配置,我呢就把它复制过来。那么自动配置原理呢,就在这个包下,那我来抓住几个比较重要的来给大家看一下,第一个,首先呢,这有一个data source auto configuration,这就是数据源的自动配置,我们稍后再说,这儿呢,有一个叫data source configuration,我们来打开这块呢,叫数据源的配置。我们看这个类里边呢,An b给容器中来加组件,看都是加什么呢?都是加这些data source,哎,Data source包括呢,我们各种的data source啊,各种的data source呢,这类主要是给容器中来加数据源的,但加哪些数据源就根据各种判断,哎,如果你导入了tomca JD bc连接池,并且呢,你配的spring data source type是tomca j d bc这个数据源,如果你没配也认为你是配了的,哎,那这种情况我们就导入他们K的JDBC的啊数据源,否则呢,如果是其他情况,哎,如果说我们没有C,哎我们还打了这个克瑞,而且呢,你在里边也指定了克瑞,那么呢,它也能创建这种数据源等等等等,诶这一块呢,都是创建数据源,所以呢,我们说这个类诶来参考。
08:50
这个类它就是呢,根据你的各种配置来来,它呢参考它作用呢,就是根据我们这个配置创建数据源,而默认是使用我们这个tomcat连接池的。
09:10
拿它作为数据源的,而我们可以使用什么指定呢?可以使用,哎,我们刚才看到了它的这么一堆配置,都是来判断这个spring data source type的,它来指定自定义的咱们这个数据类型,比如我们经常用的C3P0,哎,包括呢,我们用的DBCP等等等等,而我们说什么能支持哪些数据源默认可以支持。可以支持,哎我们看到,哎我们看到呢,它自带的能支持的就有这么多,哎有咱们这个tomcat的这个JDBC,哎我就把它复制过来。算上一份。好,这呢是一个,包括呢,它还能支持哎我们这个,哎黑科瑞的这个JDBC,哎包括呢,它还可以支持我们这个DBCP,我们这个source,我们这个数据源。
10:12
哎,包括呢,我们这个DB cp to,哎,这个包括呢,我们也可以指定自己的,比如说如果我们指了一个数据源类型不是以上的,那它就用这种来给我们创建数据源,而且呢,我们来看自定义数据源在这儿,当然也可以来这个自定义数据源类型,比如我们用成C3P0,而这一块呢,主要就是它呢有一个机制,就是如果你是自定义数据源的类型,你的这个数据源是怎么创建出来呢?它是用这个properties,比如说我们这个绑定了数据源属性的这个类,调了一个叫initialize data source build,然后调用build方法,而这个build是帮我们返回一个。
11:00
咱们这个相当于建造者模式,它是使用这个build来创建数据源的,而builder创建数据源的步骤呢,我们可以看到这一块有一个create来创建数据源,创建数据源呢,哎,这块有一个build build呢,这个build调用build方法帮创数据源,它呢就是利用BU拿这个工具进行反射,创建出数据源,并且呢绑定上相关的属性,这个棒的方法就是进行属性绑定,利用散射。创建相应的数据源。数据源,然后呢,并且绑定相关属性。哎,这就是我们啊说的数据源的自动配置能有用,默认的我们也可以自己指定,那还有一处呢,比较好玩的配置,这一块呢,有一个叫data source auto数据源的自动配置,这自动配置里边呢,哎,放了给LC容器中添了一个叫data source initial LA,诶它呢也非常好用,这initial的作用是什么?诶我们来点进来点进来这initial呢,其实是一个application listener,它是一个监听器,而这个application listener我们在spring注解版的时候给大家啊有讲过,大家呢可以去来参考它的原理,我们就来说一下它的这个作用,这个作用呢就是哎两处我们直接参考这个类就行了,这个类上的解释也看到来初始化的时候呢,可以帮我们运行这些schema这些文件。
12:43
包括呢,我们在包括呢,我们这些data的这些文件,它的这个作用啊,其实我们看到诶第一个叫post construct,就如说我们这个数据源,当创建好,我们把这个initial LA,我们创建好对象以后,它要调用这个方法,这个方法的作用呢,从容器中我们看,诶它拿到数据源,拿数据源以后呢,Run scma scripts,这是它的第一个作用,他呢就是运行,运行咱们这个建表语句。
13:13
哎,我们可以把建表的那些circle,哎给人家放,放在指定位置,人家就能运行了,这是第一步,哎包括呢,我们来看还有一步叫on application event,这就是我们这个监听器,在我们监听到一个事件以后,它会调用这个方法,这个方法呢,它还能让scripts,它还能运行咱们这个。插入数据的语句,运行咱们这个啊,插入数据的咱们这个语句。那这样的话呢,我们把建表以及插入数据的相关SQ文件我们放进来就行了,而它默认的规则是什么?默认默认需要。只需要将咱们这些文件命名为命名,为什么呢?你看人家这个类上呢,说的是这个规则,哎,如果是建表的circle,那你就命名成skyma杠星这种circle。
14:14
而如果是数据的。那你就命名成data。杠星这种形式的色,哎,就这么来命名就行了。哎,我们把它这个芯来把它呢,复制过来用properties。好,就是这两种文件看ma杠的和杠。这两种文件。这两种文件的运行呢,哎,就是在这个引力收拉里边运行的,哎,正好呢,我的课件里边,哎给大家有一个建表语句,我们可以来测试一下。文档JDBC,诶我这里边呢,随便拿一个circlel来,我们来看我们启动的时候能不能把相应的表创建出来,CTRLV我来粘过来,但是要能创建表呢,我们大致看一下它的这个代码,我们在跑这个建表语句的时候,它第一步它先要get scripts,先要得到这个文件,而它获取呢,诶你可以来指定文件的这个路径位置,它如果能获取到那就OK了,如果不行,默认呢,就是从类路径下来找这个for bank,而这个for bank呢,那就是之前我们传的这个SMA,哎叫SMA,也就说呢,他来找这个sIgMa-platform文件,或者呢,来找Sma.circle而这个platform呢,默认就是咱们这个叫O,也就说你这个文件想让它启动,你把这个名必须改成叫死改嘛。
15:54
或者呢叫ma-O它呢,都是默认加载的,那我来启动一下我们这个主程序,我来启动看我们这个建表语句能不能启动起来呢。
16:08
好,我们这个启动起来了,包括控制台呢,我们其实也能看到TE circle已经执行了了,我们来到数据库JDBC表,哎,我们看到department这张表也已经执行了,当然我们还可以用另外一种方式,哎,这个呢是我们按照人家默认规则的,也就说默认规则。默认规则,哎,是叫SKY吗?哎,你必须呢叫sIgMa.circle或者呢叫sIgMa。杠o.circle而当然这个O也是可以改的,因为这个O我们刚才看到它是拿platform来做标志的,好,那我们也就不整这么麻烦了,我们直接弄成自定义的,比如呢,我这个circle文件,我们就叫department,那我就想运行这个circle文件,我们也可以直接在这来指定码。
17:05
开马,那么这个开马呢,我们来看一下。它呢,我们来点进来,它是一个list,所以说呢,我们直接可以来指定我们多个文件的位置,那list我们的压面的写法,那就是杠,诶杠空格,那第一个我来写class pass类路径下我们的这个department circle,那如果还有呢,那我们就继续啊,我们再来写两多个路径,那我就来指定上一个路径,我这个呢表我来删除掉。删除掉,来重新启动,我们看还能不能创建出我们这个的表,好,我们来启动起来。好,启动起来,哎,我们看到呢,这也有打印exte circle执行我们这个circle脚本文件,哎,就是我们这个department来看一下,我来F5刷新一下,哎,这个的表呢,也又创建出来了,所以说呢,这就是我们说的也可以用这个来指定位置。
18:09
可以使用。使用它指定位置。好好,那么这个呢,我们就放在这儿了,而且呢,我们来说,如果我们要操作数据库,那数据源是能拿到了,那操作数据库呢,我们这个boot,它还默认有一个自动配置,我们来给大家看一下,在我们这个JDBC里边呢,还有一个叫j d bc auto来我们能看到如果有数据源的情况下,它还给我们容器中会放一个JDBC,以及是我。
19:05
那我们要操作数据库呢?我来写一个最简单的演示方法,我们来试一下好。我这个我们就在这来写一个controller吧,Controller我们来发一个请求,我们就叫hello controller,我们在这controller里边呢,我就直接来注入JDBCLT,我们来让他查一些数据,JD bc templ,好,JDBC,我们是可以直接干嘛呢,自动注入的,因为人家都给我们装配了,好我public,我来返回一个map。能查出的数据来返回。那么怎么我们把这个入我们这个呢,我就用行来,我们就叫query for。啊for,哎,我们就查所有,那这个语句呢,我们就叫select from from我们哪张表呢,我们就from我们这个department这个表,哎,我们就来看这个表。
20:13
我们来写一下from department department这张表,那就来查所有就行了,然后呢,他帮我们来返回所有的数据,把这个数据呢,如果有多个,它封装成一个list,每一个字段呢,里边是一个map的关系,我们把这个返回。好,我们就只要第一条数据GET0,好,我们给数据库里边我们来插入上,给这个表里边我来插上一条数据来测一下啊,你叫开发部。我们去叫AA吧,好,我来保存一下。这个方法呢,我们来让他处理get,来让他处理咱们这个toy请求,然后呢,把所有数据response body写出去,好来重新来启动一下,那注意啊,现在一重新启动呢,这个表又会重新给我们创建一次,就说这个建表语句会在应用启动的时候给我们创建,如果我再来启动。
21:17
我们来看到这个表,如果重新创建,我来刷新,哎,就没数据了,好,我来加上一个。就是说这个大家注意一下,你当你建完表以后,不让他建了,你把那个文件一定要删掉,好我来发一个query请求,你看能不能拿到这个数据,括8080回车来,我们看到呢,这个数据也返回了,这就是我们用原生的JDBC来操作数据库,配合JD bc temp。
我来说两句