00:00
好,我们来说第六章节数据访问,我们将从呢,Circle和no circle2个角度来分析一下我们spring boot未来该如何整合各项技术来操作我们数据库。你先来看circleql部分,那按照我们以前对spring boot的用法,我们想要操作数据库,完成整个一系列的增删改查,那就是第一步想导入我们数据开发的这个场景,就是我们的什么什么start,那一旦导入这个场景以后呢,那接下来我们这个场景会给我们导入很多的数据库的相关的自动配置类,什么什么auto configuration,这个自动配置类呢,肯定又会导入一些组件,比如我们要操作数据库最重要的组件就是数据库连接池data source,比如我们说的数据源,那肯定呢,这个自动配置类会给我们导入数据源,而数据源里边呢,我们又啊有一些关键的,像比如我们数据库的连接地址,账号密码等等这些信息,那这些呃,配置项呢,肯定又是跟什么properties里边的一些配置项进行绑定的,所以。
01:00
按照我们的想法呢,想要操作数据库只需要做两步,第一步导入数据库开发的相关场景,第二步呢,配置,配置文件里边跟数据库有关的相关配置项就行,那么就按照这个做法来做,首先我们来看进行数据库开发,我们该怎么做来找到它start来到spring boot官方文档啊,我们的getting start,呃,应该不是getting start using spring BOO在这个里边呢,有我们的所有start来看有没有跟数据访问相关的,那这块呢,Data的,那都是我们spring BOO来底层整合数据访问相关的,有整合search CA,包括Co base等等一大堆的。那么现在呢,相相当于想要做原生的JDBC,我们可以先来看它怎么做,所以我们只需要导入第一个场景叫spring BOO start j d bc,这样呢,我们就是JDBC开发,当然也可以导入人员spring BOO官方的这个GPA,那操作底层数据库呢,也会非常方便,甚至于呢,我们在未来要操作red。
02:00
我们只需要导入spring boot state start data,所以大家会发现在B官方对所有数据访问层技术的整合都叫spring boot start data什么什么,那么现在呢,就来做第一步,导入spring BOO start data JD bc,那还是以我们的这个admin项目为例,那点进来好,那么现在呢,来depend,我们现在要进行数据访问层的啊这个开发我们就来导入数据库开发的这个相关场景,JDBC的这个场景,好,这是我们要做的第一步,我们来记录一下,导入我们这个JDBC场景,导入咱们这个JDBC场景,这个JDBC场景我们来导进来以后呢,我们接下来就来分析它有没有做了什么自动配置。然后呢,我们就可以知道我们接下来该配哪些,而且呢去哪配,所以接下来第二步我们就应该是分析分析自动配置,那所有的这个自动配置呢,我们不妨可以来看一下,首先我们来看一下导入的这个JDC,它导了哪些东西,它呢首先导了这个spring data来进行JDBC的这个相关操作,还有一个spring boot start j d bc点进来,然后呢,在这个start j d b CC里边导入了一个数据库连接池,叫黑carry瑞,所以我们来可以看一下啊,我把这一块复制过来,然后呢,我们这个场景,我们把这个场景分析完,它帮我们来导了哪些东西,那我可以直接呢,在这个me的这一块,我们来截一个图,在这个start j d bc里边导入了数据源,导入了JDBC,包括导入了spring来进行事务操作相关的这个场景。
03:40
这是我们来分析过来的。那这个呢,我们都知道它是spring支持事务的,然后呢,这一块呢,是spring来进行JDBC操作的,然后呢,这一块呢,是我们一个非常优秀的我们这个数据源,比如说数据库连接池,好我们把它整过来,那它呢给我们导了这些,但是呢,我们如果仔细的来看的话,我们发现如果我们想要操作数据库呢,它其实少导了一个东西,那最核心的就是我们的数据库的数据库驱动,那为什么我们现在思考一下啊,为什么我们导入咱们这个JDBC场景,官方给我们不导驱动呢?官方不导入驱动,其实呢,这个事情很好理解,因为现在呢,官方把数据源这些导进来,他也不知道你现在是底层的数据库是用Oracle circleq server还是马circle还是什么,所以呢,不导驱动的原因是官方不知道,不知道我们接下来接下。
04:44
打来要操作什么数据库,所以呢,我们接下来要操作数据库,什么数据库我们就导什么驱动就行了,那么现在呢,要操作MYSQ,我们以MYS为例,我们来看一下我本机呢,已经装了一个MYS,大家连上自己的就行。
05:00
来给大家看一下啊,我的这个MYSQ呢,在这儿我已经装好了,而且里边呢也有一些之前的表,所以呢,我们可以来导入我的MYSQL驱动,那MYSQL驱动呢,大家可以去我们的memory postry里边,好,我们就来随便把这个MYSQL驱动之前已经搜索过来,Mysq connect Java把这个复制过来,但是呢,现在大家一定要注意,我们来既然把这个马S驱动导过来,我们顺便就来分析一下我们额外导的这个马QL驱动官方到底有没有做版本仲裁,也就是说我们是不是不用写MYSQ的这个版本来看啊,如果我把它删了,其实人家这呢也没报错,说明呢,在spring boot官方已经对my circle的这个驱动他已经做了版本仲裁,我们不妨可以来看一下在spring boot的start parent dependency里边来搜一下关于my s connect Java的,来看一下啊,MYS驱动的版本现在是多少?8022,所以大家一定要注意MY。
06:00
SCO驱动呢,官方已经给我们仲裁了版本,所以呢,我们现在最重要的第二步,我们还要导入MYSQ的驱动,这块驱动呢,官方的版本是这个,我们把整个驱动的导入拿过来。但是现在的问题大家一定要注意,要说呢,默认版本,我们虽然可以不写版本,默认版本是这个,但是大家一定要注意,我当前因为我本机我装的这个MYSQL,但我选中我的整个SQL,然后呢,我点信息家会看到我的MYSQ呢是5.5版本,就说我是五版本的MYSQL,而如果你搞了一个八的驱动,这个驱动版本过高,所以呢,我们一定注意呢,我们的这个底层数据库,数据库的版本要和驱动的版本对应,数据库版本和驱动版本对应,虽然呢,他给我们进行了默认的版本仲裁,那我们就应该做的是我们来修改一下版本,那我们修改版本怎么办呢?有两种办法,那第一种办法我们看一下我能不能把这一块的卧室,我直接来改为我们的。
07:15
我们来做的第一步,呃,我们的第一步,第一步呢,我把这一块version去掉,我们叫8022,当我来找一个我们五版本的来搜一下my circle connect,我在memory的啊,这个网站里边,好,我们来搜到啊,My circle connect来找五版本的,我们可以找五最高版本的5149来,我们这一块呢,我们就把这个版本换成5149。这是我们的第一种办法,我们可以来看一下我们这一块有没有换成5149,这是我们的第一种办法,我们在这儿呢,导入5149,当然第二种办法,我把这个去掉,把这个去掉,去掉了呢,又来到仲裁的默认版本,那第一种办法呢,写死版本,这个呢,是利用了我们spring啊,不是spring boot,这个呢,我们要想要修改版本,想要修改版本,想要修改版本到两种办法,第一种我们直接呃依赖引入具体版本,第二个依赖引入具体版本呢,利用的原理是我们这个me的就近依赖原则,就近依赖原则。
08:35
比就说呢,我们导的这个my circle connect Java,虽然你呢约定的版本是5149,但是呢,你是在parent这个项目里边约定引入的,而我呢,现在引入了一个这个是我项目的,所以呢按照就近依赖路径最短优先,那我引入了5149,然后呢,再接下来我们还有另一种办法,因为我们能看到官方仲裁的版本叫my circle version,它的这个版本的话,它呢是在我们的这个properties里面写的属性,所以呢我们也可以在我们这一块我们直接改掉这个properties属性,这个properties属性呢,我也改为5149,大家注意,现在呢我来刷新一下啊,现在呢是8022,因为我的版本号没写,但是呢我一旦把这一块改成5149。
09:26
我再来刷新,好,现在呢又变成5149,所以呢,这是第二种办法,我直接在我当前项目里边声明,重新声明,重新在当前项目里边声明你之前仲裁的版本,重新声明版本,比如像这个它呢,这个利用的其实就是我们me的me问的属性的,咱们这个就近优先原则,就近优先原则比是呢,以我当前项目配的这个属性优先,如果我的副项目也有这个属性,以我的属性优先,所以呢,这就是我们说的这个,那就没有任何问题,那现在呢,我们相当于把spring boot,我们想要开发数据库,我们引了一个JDBC的场景,然后呢,额外的引了一个数据库驱动,其实我们想要操作数据库就基本能操作了,那为什么能操作,我们可以大概分析一下,我们自动配置配了哪些东西?我们不妨来到我们的这个自动配置包,我们先来进行人肉分析,来,我们点进来,来。
10:26
来看一下跟数据库有关的我们这个自动配置,诶这儿有一个data,这个data呢,我们一听就是跟数据访问有关的,比如我们跟JBBC有关的配置在这儿,我们一看这个呢,它JDBC有PY,相当于他来找一下我们这个JDBC的这些,呃,接口类都在哪的,这是第一个的自动配置,当然我们现在呢还用不到,然后呢,我们再再接下来往下翻,大家来看啊,我们呢,会专门有一个大包叫JDBC,在这一块呢,是对于我们整个数据库相关的配置,我们能看到第一个叫data source auto configuration,所以呢,我们来看到了我们的第一个那一听它的这个名字,自动配置的类,自动来1234,我们分析自动配置,自动配置的类,自动配置的类呢,我们看到了第一个叫data source auto configuration。这就是数据源的。
11:26
自动配置相当于帮我们来配好了底层要用的数据库连接池,然后呢,再我们来再往下找它,大家看啊,还有data source trans manager,我们一听这个东西呢,就叫数据源的事物的配置,所以呢也配好了事物,事物管理器的配置,这事务管理器呢,其实就是我们spring底层来管理事物的组件,事务管理器的自动配置,所以呢,相当于我们数据源的功能有了,事物的功能也有了,包括我们下边还有非常多,呃,你的这个数据源呢,还有一个叫j d bc temp auto configuration,也就说呢,这是我们这个JDBC组件的自动配置,因为我们现在没有整合任何其他第三方框架,比如马贝蒂么来操作数据库,所以呢,Spring官方我们也有一个叫j d bc tempt这个玩意。
12:20
他来给我们来操作数据库,这是一个轻量的操作数据库的小工具,J dbc complete的自动配置,他呢可以来操作,可以来对数据库,对数据库进行c rud,就我们所说的增删改查,包括呢,还有自动配了哪些,比如我们这个下边还有g n Di,如果你的这个数据源你不是在这配的,你是在容器里边,比如我们的呃这些啊呃web的之类之类的,类似于他mca这些web容器里边,你可以使用基因Di技术,J n Di的自动配置,当然我们现在呢,这一块我们不用管,因为我们用不到,然后呢,再来加上我们这儿还有一个叫我们来看一下啊,还有一个xa,我们的这个data source,把这个拿过来,还有一个xa data source的这个自动配置,简单来说就是一个分布式事物相关的这个配置,那我们现在呢,也还用不到事物相。
13:21
关的,所以呢,那按照我们自己分析的数据源,所有的东西都配好了,正好呢,我们来分析一下,首先我们来分析第一个叫data source auto configuration,关于数据源的自动配置,那数据源的自动配置呢,我们看它给容器中注入了哪些组件,而且呢,我们来分析之前,我们大家一定要注意这么几个,第一个叫condition的啊,Missing being,而容器中呢,没有这种组件的时候才启用这种配置,而Miss的这个玩意儿,这是什么?这是基于响应式编程的这个数据库连接池的这种类,所以呢,如果你不是用响应式技术站,那是用原生的这些是编程,所以我们就给你配置原生的这个数据源,所以数据源呢,这有一堆,然后接下来我们来看啊,而且它还有一个叫enable configuration properties,我们说也一定要注意它,它呢相当于开启我们配置文件绑定功能,跟数据源有关的,所有的这个配置都在这个data source properties里边绑定的,然后呢,都在我们跟配置。
14:21
文件的这个绑定的springnos sourceur,所以通过这一番分析,我们发现了,其实我们想要修改修改咱们这个数据源相关的配置,你只需要修改配置文件它开始的东西就行了,然后呢再来继续,而且呢,我们在这来注意啊,它呢import给里边也导了一些配置,这个叫什么?呃,嵌入式的我们这个数据源的配置就是这个配置类,这个也没有做什么,然后再来看我们下边,下边呢我们注注意,我们来看一下有没有下边的一些东西,它在这儿导入了一些,看好啊,我们在这我们这个数据库连接池,池化的这个数据源的这个配置,池化数据源的这个配置呢,它在conditional啊,Miss being,比如说当你容器中你没有配数据源的时候,我们接下来下一堆才生效,所以呢,我们会发现数据库连接池的配置,数据库连接池的配置是。
15:20
呃,我们自己,嗯,容器中没有data source才配的,也就说呢,你自己不整一个数据库连接池,我就给你配,是没有才自动配的,而自动配哪些呢?它所所以它这一块的代码就是导入了这么一堆,好,我们把这一堆的代码拿过来,这一堆的代码其实也还挺不错的,我们把这一堆代码给大家看,这一堆的代码呢,就是导入了import,导入了一堆有个我们数据库连接池里边跟黑carry瑞数据库有关的,还有我们这个使用Tom k内嵌数据库连接池的DBCP的等等一大堆的,而我们现在呢,比如点进第一个大家看啊,Data source configuration它呢,At b跟容器中放什么呢?放data source,但是它要放哪些data source,大家注意啊,它是放这些data source,它呢,在这判断,也就是说我们能看到它是判断。如果我们当前系。
16:20
统里边是tomcat,你引的tomca数据源,或者呢,你配置了的这个属性,你在数据源里边tapb属性,你明显指定数据库类型用它,那我呢就给你配我们容器中放的data source,就是tomca这个类型的data source,但是我们现在呢,通过分析前面的泡,我们知道我们官方一引入JBBC这个场景,就已经帮我们引了一个数据源,这个引的这个数据源呢,叫黑carry瑞,所以呢,我们现在当前系统里边我们就at being应这容器中呢,放的就是海carry瑞这个数据源,那这个数据源里边的所有东西来源于哪呢?大家看啊,它创建数据源是这么创建的,调用一个创建数据源的方法,把data source properties相当于我们数据库连接池相关的配置传入进来,然后呢,我们要创建这么一个数据源,点进来,它是利用呢,我们这一个叫数据源的这个build,然后传入你指定的类型给你构建出来的,所以这一块数据源呢,可以动,根据我们相当于配置文。
17:20
建在这一块,数据源的类型我们可以动态判断,如果我们当前系统中既导入了Tom k的数据源,又导了黑瑞的数据源,又导了其他一大堆的数据源,我们还可以通过指定数据源类型,我们可以动态的给你创建出你指定你要哪个数据源就哪个数据源,当然我们系统呢,默认是它,所以呢,我们通过分析,我们现在也知道系统底层呢,默认已经给我们注了一个数据库连接池。底层配置好的连接池,底层配置好的连接池是carry,配置好的连接池是carry that source所说呢,一句话,人家给我们把啥都配好了,我们只需要开发就行了,但是呢,我们数据源想要配置好它的关键环节肯定有我们数据库连接池,我们想要连接哪个数据库,用的账号密码是什么,呃,这些基本的信息是必须要有的,所以对于我们来说,还是我们之前总结的引入了一个场景以后,我们通过分析它的这个自动配置,哎,我们知道呢,它是跟这一块的配置绑定相关的,那我们接下来跟数据库相关的这个配置,我们就直接写到我们这个配置文件里边就行了,因为在配置文件里边,它呢,就是跟这些属性都一及相关绑定好的,我们只需要改配置文件,这个配置文件呢,我来推荐使用我们的这个压面,我好久没有用过这个压面的这个配置文件。
18:45
好,配置文件呢,那我们跟数据源有关的都是叫spring.data source m有关的,现在呢,首先第一个URL我们要联向哪个地址,我们呢,现在的地址应该是j dbc my circlel冒号双斜杠,而而且我们是等本机,我就写一个三节三斜杠,否则的话呢,我就写一个local host冒号3306啊下边的我们是连接我们本机的,比如我们来随便一个数据源叫DB account连接这个库,好我们连接上这个库,我们来操作这个库里边的,然后呢,来加上肯定要账号密码,所以我来就写一个username,我的username呢是root,然后呢,密码我们也写上密码叫123456,当然这一块呢,配置一定要注意,这除了username,还有一个叫data username password,哎,我们用的不是它啊,然后呢,把这两个呢准备过来。这是操。
19:46
做数据库的账号密码,然后呢,当然我们还有数据库的类型,这个类型呢,我们不用指定,我们当前呢就是黑瑞,所以呢,相当于是我们数据库的自动配置里边,我们配置数据源的时候。
20:01
我们黑格瑞数据源。它这一块的值默认就叫com的这个黑S,所以我们这个类型这一块呢,那倒可以不用配置,我就把它除掉,那默认呢,我就写这么一对,然后呢,还有大家以前可能要写过的一个叫driver class。数据库驱动的这个名字,我们是靠马S口接DBC就是这个驱动,那我们现在呢,把这么这个数据库的场景一导进来,我们接下来一启动,我们来看一下整个项目呢,能不能启动,当然最好呢,我们应该是操作上。数据库里边的一张表,我们来看一下我们整个场景有没有导入进来。好,我们发现呢,启动成功,而且通过日志我们看到黑瑞这个数据源呢,已经starting这个数据库连接池已经都准备好了,一切都准备就绪了,而且一旦你配错了,如果你写的不对,那有可能是这样,我们没有配数据源相关的我们一起动。
21:09
我们现在导了数据库开发的场景,但我们没有把数据库配好,没有配好,那接下来大家看,那这个项目就启动失败了,失败呢,他也也说,哎,你呢,现在失败了,你考虑一下该做下边的这些事情,你比如你要设置好数据源的相关东西,或者呢,你用内嵌的数据源,而错误的原因是什么?这也有描述说我这个错误呢,是由于你数据源的这个URL属性你没有指定,我不知道数据库要连上哪,所以呢,即使我们倒了某一个场景,我们没有配好,咱们这一块呢,也会有相关的提示,好,那现在呢,这就是我们的两大步,第一大步我们导了这个场景,第二步我们配了,啊这个配置。你看啊,分析自动配置,我们现在倒了,场景分析自动配置,然后呢,我们接下来修改配置项。
22:02
三我们修改,我们应该是三个三号标题,三我们修改配置项,那跟数据库连接池有关的这个配置项就在这一块,哎,这个呢不是插门,他说的是压门,好,那我们这个配置项呢,也都准备好了,而且我们启动呢没有任何问题,那我们不妨来操作一个数据库,试一下怎么操作数据库呢?因为我们之前分析数据库的自动配置的时候,那我们发现人家在底层呢,还给我们配好了这么一个东西叫j d bc temp,也就是我们JDBC的这个自动配置,JDBC的自动配置呢,它导入了,而且跟JDBC自动配置有关的属性都叫都在JD bc properties里边声明者,所以呢,大家一定注意,我们可以通过修改这个配置项来修改JD bc tempt的设置,JD bc tempt呢?是我们spring来操作数据库的。
23:02
一个小组项,咱们通过可以修改这些配置项,可以修改这个配置项,这个配置项来修改我们这个JDBCTT来修改JDBC,我们不妨来分析一下它的这个j d bc time的这个自动配置,我们配了哪些点进来好,我们发现呢,它导入了JD bc temp的这个配置类,点进来这个配置类呢,At being应这容器中呢,就放了一个JD bc temp里T,而jdbc time里呢,它操作的数据源就是这相当于我们这个tempt能操作我们这个数据库,然后呢,我们这个temp相关的设置都在这个properties里边,比如我们的这个templ每次取出的数的这个大小分之四S等等一大堆,还有我们这个查询的超时时间等等,所以我们相关的这一块的跟j b bc temp有关的,我们又可以在这改,Spring呢,现在有一个JDBC相。
24:02
关的属性,我们在这呢可以来改,比如呢,它的相关的这个啊,Query time out,我们的这个查询超时属性,比如我们来写一个1000,那这样1000呢,相当于你只要一秒啊,以后呢,没给我查到,默认呢是诶默认呢这个是一个秒啊,默认这是一个秒,所以呢,如果你是,呃你是呢,我写一个三秒,你三秒内呢,给我数据没查出来,我就认为查询超时,所以我们还可以在这呢配一些跟JD bc tempt有关的东西,那么这个配好了以后呢,我们可以来测试一下我们能不能操作数据库,大家可以写一个请求测试,那为了简单呢,我可以在这来看,因为我们创建的这个项目是s spring初始化向导创建的初始化向导呢,给我们已经写好了一个测试空的测试类,那想要测试什么东西,就在这儿来进行测试就行了,非常方便。那么想要测试进行数据库连接,因为我们之前呢,看到它呢,已经给我们容器中at b放了一个j d bc complete。
25:02
所以我们只需要自动注入它就行了啊。我们能看到它给容器中放了一个JDBC,他们的容器中有其中有这个组件,我们呢,想要操作数据库,我们只需要用它,我们来到这个测试类里边来做一个简单操作,怎么用它呢?我写一个JDBC,他好,那就j dbc term,然后呢,我们让它自动注入,因为从容器中有,所以我们测试的时候也可以使用spring加的注解,跟我们写业务一样啊,自动注入,然后呢,这个JDB就可以来做一些事情,比如呢,我们可以让他执行query,比如我们让他查询,查询什么呢?比如我们这个query for object,我们让他查询一个对象,来查询上一呃一个对象,我们让他来查一个这个来写上一个circle语句,我们就从这张表里边来查数据,就是这个DB account来操作这个数据库,这个数据库里边呢,有一个这个表叫account table来就。
26:08
类星星from这张表,然后我们就来让他查出来就行,而这张表呢,我们来看一下啊,有几条记录,这张表呢,有两条记录,那我们还除了用呃这个query for object外,我们这个呢,如果你有多条记录,它呢,还有这么一个方法叫query for list,也就是说我们可以把查出的这个东西呢,封装成一个list啊,那我们把这个呢,拿过来,还是这个S语句。然后呢,这一块就查,就写我们list测里边的这个,呃与这个数据的类型是什么,所以我们在这可以来指定类型,比如我们现在呢,想要把这个数据呢,都封装成一个account对象,那我们现在还要写一个对象,我觉得太麻烦了,那我不写了,然后呢,我就调一个最简单的JDPC,点一个count,呃,那我们可以有一个query for for for object,我们想要做一个计数,那我就来query for object来select count新来记个数就行了啊,来统计一下这张表里边有几条记录,而且呢,因为查到的这个数据,我们的这个数值可以封装成一个数字,所以呢,我们在这传一个浪,点上class,数据类型呢,写一个浪,那这样我们查出的这个数据就是一个浪,我们来s out,或者呢,我们可以用self接来进行。
27:45
日志打印。log.in记录数,记录总数,那么当前表里边的这个记录总数呢?数字有多少个?我们可以来给他打印一下,我们当前的这个记录数呢?有个这么多走起。
28:06
那现在来看,我们所有的这些配置能不能使用?JDBC他里操作数据库呢,我们也不用管释放连接等等过程,它呢操作完帮我们来自己释放好啊,我们现在要做单元测试啊,不是来运行,你就来在这儿运行一个单元测试。好,我们看到呢,这一块打印记录总数两个没有问题,那我们至此呢,整个数据库的操作场景就整合过来了,其实也非常简单,导一个场景,写一个配置就行了,然后呢,我接下来测试,我们把这段测试代码也给大家拿过来测试。只要容器中给我们放了什么组件,我们在测试期间,我们就直接可以把这个组件注入过来来进行测试,这就是我们说的数据库最基本的开发场景。
我来说两句