00:00
好,那接下来呢,我们就来整合马来操作数据库,前面我们整合direct数据源的时候,我们操作数据库呢,使用的是JD bc tempt,但是这个呢是spring加自带的功能,比较简单的一个操作数据库工具,那么后来开发里边呢,我们还是比较喜欢使用马贝蒂斯,马贝斯的官方getup地址,那在这一块,其实按照我们以前的整合这个经验,那么要整合一个东西,我们应该优先寻找它的这个start,而spring boot官方的这个starter命名呢,一般叫spring boot starter杠什么,所以呢,如果我们去springt的官方来找这个starter里边有没有操作马贝利斯,那肯定没有,因为马贝利斯呢属于第三方技术,那对于第三方技术的这个命名一般呢是新后边的s start,其实我们以前po文件里边这个direct数据源就遵循这个命名方法来看一下,那direct呢,它叫direct spring boot start,那么就来spring boot,我们来马贝斯的官方来看一下它。
01:00
它有没有整合spring BOO的这个start,然后他get have地址,那往下翻,比get地址里面呢,有它的MY3,以及有它跟spring的整合,我们主要看下边这有一个spring boot start,点进来这个spring BOO start呢,我们想要引入这一块官方呢也有一些文档,比如这个quick start,我们快速开始,我们就在这呢,可以来参照该怎么来整合我们这个myab,另外呢,我们来看在这块我们主要呢,想要整合我们spring myab,首先得引入MY的spring BOO start这个场景启动器,我们就点进这个场景启动器,我们来点击它的这个po文件,找到它的坐标,我们就能引入了,主要我们来看它的这个坐标,呃,这是group ID ID version版本呢是215,这个snaphot,这是一个快照版,我们最好呢回到它的这个spring BOO starter来切换到我们这个非快照版,来到它的这个标签,标签里边呢,我们看到它有一个发布版叫214来点进来我就用。
02:00
最新的214的spring BOO start这个呢是15天前更新的,来点过来看一下,然后呢,我们来看一下它,那我们想要引入我们的这个starter,那我就把它的group ID ID引就行了,所以我们第一件事要做的就是我们先要引入它的这个starter,那这个start呢,我们把它引进来,来到我们的这个po文件里边,就在下边dependency,首先我们把它的group ID复制过来,然后呢再来把它的模块ID,我们来引的是start的这个po文件里边,把它的artifact ID复制过来。还有它的版本号,版本号呢,这一块是VERSION214,好把这个复制过来,来,这是我们最终在get HUB里边我们找到的MY贝蒂斯的官方start的这个地址,那么找到以后呢,接下来我们就来进行分析,我们整个start呢,一旦引入进来以后呢,我们在开发之前,我们一般先来分析一下这个start里边给我们干了什么,首先呢,分析它的这个po文件来刷新一下,我发现呢,马贝t start给我们引了数据开数据库开发的JBBC场景,也有马贝丽斯s boot的自动配置包,这是马贝斯官方写的,当也引了马贝蒂斯这个框架,还引了马贝斯跟spring的这个整合,所以呢,这是我们这个斯纳特他引入的这几个依赖,我们其中引入了马贝蒂斯3.5的版本没问题,那么马贝蒂斯呢,相当于就被引入进来了,那其实按照以前以前我们使用马贝蒂斯呢,我们需要一个。
03:42
全局置文件,全局配置文件,而且呢,按照这个配置文件,我们还得创建出一个circle session factory,咱们按照这个工厂factor,然后呢,这个circle session factor里边我们可以open session,我们能得到circlerc session,然后circle我们通过circle session呢,又能找到我们这些member接口来操作数据库,以前所有的东西我们全部都得手敲们来看一下,导入了这个东西以后,它帮我们自动配置了,是吗?就来到它的这一块,我们的炸包来看一下MY贝my spring BOO的autoconfi来点进来。
04:19
首先看它这个matter info文件,这有一个spring factories,这是我们之前说的这个机制所book呢一启动起来,然后呢,会找enable auto configuration下边我们所有要开启的自动配置,相当于呢,马贝斯官方默认呢,我们这个JA包一加载它会呢,呃,引入我们这个马贝斯auto configuration和马贝利斯language driver auto configuration,我们主要分析一下马贝利斯的这个auto configuration,先按照这个后缀名,我们也知道该分析哪个,这块呢也写的看一下比较多,来看一下它整个标头是这么来写的,然后呢,Condition呢,On class这个circle session factory circle session factory being这个东西呢,一看就是你倒了马贝斯这个炸包的时候才会有这几个类circle session factory,所以呢,OK,没问题,然后呢,接下来你有这个数据源,整个容器中有一个数据源,而且有且只有一个数据源,Conditional on single connection。这个意思呢,就是我们。
05:19
现当前容器中只有一个候选的数据源,然后呢,接下来还有一个enable configuration properties,哎,我们会看到呢,好多的自动配置类里边都有一个,这个叫enable configuration properties,这是我们说过的这个东西,就是呢,我们整个自动配置类里边后来可以能用到一个配置项,它呢所有马贝蒂斯的配置项跟这个绑定,马贝蒂斯配置项绑定类,它绑定到这个类上,那么就来看所有对于马贝利斯的配置,就应该从这个类开始,他呢绑定的这个配置文件的这个前缀是这个前缀在下面,那相当于有一个固定前缀叫马贝利斯,那么把这个呢也拿过来。
06:03
把这一块的这个分析给大家拿过来,那么现在呢,通过自我分析,我们就知道我们引入的这个东西,我们后来该做什么,首先呢,所有的这个配置类。我们的这个配置项都是跟这一块来进行绑定的,而这一块的整个我们来写一下,它引入的是常量,它的这一块呢,我们来写过来就是叫马贝斯,这个常量的值叫马贝斯,然后呢,它开启了自动配置,跟这个配置类呢进行了绑定,所以呢,我们如果想要修改我们马贝蒂斯就可以,我们可以修改配置文件,可以修改配置文件中,配置文件中咱们这个马贝蒂斯开头的所有,开始的所有,那我们就是对马贝蒂斯的整个配置就行了,然后呢,那我们就来看配了哪些,那通过我们这个自动配置的这个分析,我来分析马比利斯呢,官方的这个自动配置类,它呢写了这些我们来看啊,整个这个类呢,一构造的时候就会把配置文件的所有东西拿过来,因为我们这个配置文件呢,就是跟这一类绑定的,那接下来它按B,我们可以看到它给容器中呢,放了一个circle session factory,诶,那之前我们要做。
07:17
的这个东西,这个已经自动配好了,自动配好了,自动配置好了,然后呢,我们circle session factor1有以后呢,我们通通过这个我们可以得到circle session,只要操作一个次数据库,我们就可以open一个circle session,所以呢,我们看一下s session factor配好了,数据源呢,就用的是我们容器中的数据源,我们说这个and比应方法,只要有一个参数,那是咱们对象类型,这个参数呢就会从容器中确定,那容器中呢,现在是direct的数据源,所以马贝蒂斯呢,其实也是从deri的数据源里边获取链接来进行操作,没问题了,数据源呢也放到这个里边了,而且呢,所有其他的配置它呢都是来参照,都是通过这个properties里边拿的,所以我只要我们这个properties里边配了什么,比如有一个叫con location这块呢,就配的是马贝整个全局配置文件的位置,还有map location就是马贝我们整个map文件的位置,所以我们这一块。
08:17
那呢,以前在circle session factory里边能配的所有东西,那在这呢,全部都能配置好,好没问题,然后呢,再来接下来它给容器中放了一个circle session factor being全部都配好,然后呢,还给容器中放了一个circle session template,这个circle session template呢相当于就是我们的一个circle session,这里边有circle session来帮我们来操作数据库的,还给我们来circle,它自动配置了,自动配置了circle session template,在这个template里边组合了circle session,包括我们看马贝源码的时候,我们也能找到这个s session tablelate,它里边呢有s session,真正对数据库的增删改查用的就是它,然后呢,接下来我们继续来往下,我们还配置了哪些呢?我们来看一下啊,这这还有一个配置叫import,小导导入了一个这个东西叫conditional missing being,当容器中没有什么的时候呢,它额外还。
09:17
给我导了一个这个。相当于它的自动配置呢,它还导入了一个它它是什么?Import,它这个叫auto scanner register,然后呢,这个东西的话,如果我们以前用过原生的整合,那我们就知道我们以前呢,会要扫描我们配置文件都在哪一块位置,要把我们的这些接口要拿过来,我们写的map接口要拿过来,所以呢,它是利用这个方式import import呢相当于。它来导入这个包里边的这个东西,然后这个包里边呢,指定了一个这个叫register being DeFinitions,那注册一下这个东西,在这个东西里边呢,有一个核心关键我们来找一下啊。
10:01
我们主要是这个auto con菲好auto菲,然后呢,他在这来注册,他呢会拿到我们这个a notation me data,拿到这个注解,然后注解呢,我们来看到这一块呢,在日志里边都会打印叫at member,相当于呢,它会找到所有标注了at member注解的这个接口,然后呢,他们都认为是我们操作贝蒂的这个map接口,所以这个map呢,人家也都自动配置好了,只要我们写的,只要我们写的操作myab的接口标注了map注解就行了,接口标注了map注解就会被就会被自动扫描进来,扫描进来好,这就是我们说的这几个,其实相当于人家给我们啥都配好了,那接下来我们该怎么做就怎么做就行了,那接下来我们就来整合马贝斯来操作一下,这一块呢,已经整合好了,那么,该写什么就来写什么。
11:01
首先来到雅麦尔里边,这个雅麦尔里边呢,我们跟马贝蒂斯的所有配置都在这,哎,以及马贝蒂斯开始,所以呢,那我们正好来操,参照我们这个马贝蒂斯官方文档怎么使用马贝蒂斯,我们就把马贝斯hello word再来一遍,来到马贝蒂斯的这个官方文档该怎么使用,那首先呢,马贝蒂斯得有一个全局配置文件,这个全局配置文件呢,位置在哪?在这一块我们直接有配置在myab来写一下MY,其中呢,就有一个叫con location,在这一块呢,这个项就是来指定全局配置文件在哪,全局配置文件呢,在class pass类路径下的这一块。我把全局配置文件,我们直接把它的这个模板复制过来,诶这个模板复制过来,好,我们呢,可以把马贝蒂斯所有的东西我们都写到马贝斯这个里边,好,我们先来写一个全局配置文件,我来先准备一个插。
12:03
我们来直接写一个吧,那就叫马贝利con,这是马贝斯的全局配置文件CRV给这一粘,所有的东西呢都不用,因为所有的东西呢全配好了,然后呢,接下来还有马贝斯的map映射文件,Map映射文件呢,就是一个插来操作我们这个数据库的,而这个number映射文件呢,我们一般这么来做,比如我可以准备一个接口,马贝斯要操作数据库,我们得先写一个接口,比如我们就来写一个接口来操作这张表,就叫account啊,我们的这个接口我就叫account接口。Account account member专门来操作我们这张表的member,好,然后呢,接下来我们就在这来准备上一个方法,比如我们准备上两个,第一个呢,返回我们的这个账号信息,我们的这个account账号信息。我专门来准备一个类,来封装我们这个账号里边的这个内容,Data。
13:06
那么数据库里边呢,有这么几个内容,其中呢,我们来看啊,这个里边有ID user ID和money,我们来看一下它们都是什么类型的改变表都是int watera以及int啊,那我们接下来就private,我们这个in in类型的们这个ID,这是我们的主见的ID,但是这个11位长度,这应该是long类型的,那么主见呢是浪类型的,然后呢,还有一个I位,那么这个string类型的,他说这个是一个watera,这是user ID,那么就来写一个user ID,然后呢,还有一个private。这还有一个叫money,它的这个他现在拥有的经历,好我们现在写到这private这个呢,是类型的,好我们准备好了这么一个account,准备来封装我们数据库里边的数据,而这个member呢。
14:02
来看一下啊,这个接口呢,我们一般也放在这个map包下。走,我们把它呢放进去,放进去好,我们这个member接口呢,我们现在已经准备好了,那接下来写第一个方法来返回account,来操作一个account,然后我们就叫get account act吧,啊啊,我们要获取account,然后呢给我传一个long ID,然后呢我们就来给你来获取,当然这个呢,相当于是我们接口声明的这个方法,而方法的实现呢,我们要写在这个插文件中,那参照马贝斯官方文档,我们先整准备一个全局配置文件,然后呢,接下来再准备一个circleq映射文件。好,那这个circle映射文件呢,我们就来放在这个member里边,然后呢,它的这个映射文件的名字就叫account member count map,第二一个插麦,这是我们以前用马威斯规则,哎,只要呢,我们这个插麦的这个名好,我们在这呢准备了一个插面,然后呢,接下来我们要映射到这个接口上,所以我们name space这一块我就得改掉,我们得写一个叫account member。
15:13
对,把这个接口的全列名复制过来,相当于呢,我们在这个member文件里边是来定义我们account这个接口下每一个人都该怎么用的,好,我们把这个呢复制过来,老师呢还装了马贝斯X的这个插件,所以这呢有一个啊小鸟,如果我们写了这个插麦配置文件们点过来这个小鸟呢就会自动定位到这,因为我呢,我们在这个接口里边声明了一个方法,是按照ID来查账号的,所以我们呢在这来写一个select标签,标签名呢就等于方法名,标签的这个ID等于方法名,然后呢,我们接下来result type,我们返回这类型呢,我们现在是一个account这个账号类型,我们就来写account。我们返回至类型呢,是这么一个类型,我就把这个类型写在这,然后呢,接下来我们的SQL语句该怎么写,那么就在这来写select行,From哪张表呢?我们现在是来这张表。
16:13
我们把这张表拿到,我们是从这张表里边查,然后呢,按照ID查,那么就是where where,什么ID等于我们指定的值,而指定的呢,是我们传了一个这个参数ID,所以我直接写井号大括号的这个ID就行了。好,我在这准备了一个相当于这个查询方法,包括呢,你想插入,你也可以在这儿准备一下其他方法,跟我们以前的使用一模一样,好,那我们现在呢,相当于在这儿首先指定了马贝蒂斯全局配置文件的位置是这一块,然后呢,我们再来指定马贝蒂斯circle映射文件的位置,那所有的circle映射文件在这儿,所以呢,我们还得写一个叫member location。Map location mys member locations,好,它呢在class pass,在我们类路径下的我们全局配置文件位置呢,是在me类路径下,MY贝斯包下边的这个MY贝斯con,而我们这个SQ映射文件呢,是在我们这个MY贝这个包下边呢,还有一个map包下边的所有插面都是我们的SQL映射文件,所以呢,我们在这只需要配置马贝斯的两个规则,配置马贝斯规则那么就开始使用了,我们指定了马贝斯全局配置文件,指定了S狗映射文件,然后呢,接下来我们就可以完全使用了,我们来参照一下啊。
17:43
我们来写一个测试类,来到controller里边吧,那随便来到controller里边,我们就来写一个方法,Public返回account,按照呢账号的ID get8id来返回,然后呢,我们来写一个at get map,那你呢,就给我处理一个叫act,我们返回account账号类型,然后呢,Return这个账账号的内容信息我们就是通过这个map得到的,这个map呢,我们可以直接自动注入,但是我们一般开发呢,都是service在调member,所以我准备一个service包,我们跟所有account业务有关的,我就叫count service,那呢把它注入到容器里边,然后呢,我们来准备一个account member。
18:30
Count member啊,这是我们马贝的这个member,好,我们准备在这儿,而这个member呢,它在这画了了一个波浪线,说我们容器中没有它,那我们可以不用管,这是我们idea给我们的一个自动提示,然后呢,我们直接来写我们的方法,那相当于要从数据库里边get actct8我们的ID,按照它的ID要查出它的内容,那这个ID呢,你给我传过来,然后呢,我给你查内容,我们的map里边已经定义了这个方法,Get act方法,把查过的内容呢,我们就直接一返回,那接下来这个service就准备好了,那controlrler只需要调用service,好,我们把这个service呢引入进来,Controller调service service呢调我们的map do,然后呢,这个service拿过来点一个,我们直接调用它的这个方法,这个ID从哪来?我们还可以要求它传入一个请求参数,然后呢,我你相当于你发请。
19:30
有给我要哪个ID,我就去,最终去数据库给你查这个值,那我们这一块呢,就整个准备好了,我们发现呢,整合马位子非常简单,只要官方starter导进来,我们如果使用纯配置的方式,我们现在呢,第一种模式使用纯配置的方式,我们需要做两步,第一步呢,指定,指定我们的这个东西都在哪,全局配置文件位置,这是全局配置文件位置那们制定好,然后呢,还得指定circle映射文件位置,Circle映射文件位置,我们把这两个指定好以后呢,接下来我们就可以直接使用了,接下来呢,我们就是以前马贝斯该怎么用,我们接下来就怎么引用,那以前马贝斯的使用呢,先声明map接口,然后呢map接口再来绑定插,绑定插怎么绑定呢?那就是在我们的这个SQ映射文件里边说name。
20:30
这里边规定一下是什么就行了,绑定插的这一块内容可以给大家放在这,然后呢,你绑定好以后呢,接下来你就你的这个map就可以操作数据库了,好,那我们这一块准备好了以后,你接下来做一个测试。那直接来启动我们的项目,首先来准备监控我们的控制台,看我们的项目有没有报错。我们写了一个map接口,这个map接口呢,操作我们的数据库里边的account table这张表,然后我们还给这个map接口定义了方法,我们来看啊,在这一块呢,启动失败,启动失败呢,它会在这一块说说我们这个account member,这个呢,需要一个这个account member这个类型的,但是它cannot be found,然后呢,大家有没有记住我们之前说的一个事,就是呢,我们所有的这个member接口需要标注at member注解,所以呢,我们接下来在这呢,只需要再做一件事,At member注解,以标注告诉我们的这个。
21:33
啊,马贝这呢,就是一个map接口,它来操作我们这个数据库就行了,啊,我们这个注解一标注以后呢,我们再来看。重新启动,所以只要我们启动过程中有任何问题,控制台呢,也会直接给我们报好错,好,那现在呢,整个启动完成,启动完成呢,接下来我们就来访问一下我们的这个叫act就行了,来访问local host,我们先登录进来,因为我们有之前有拦截器,啥都得登录,那我们就来登录进来,来访问我们的accct actct,然后呢,问号带上ID等于一好,然后呢,他500报错,报错的原因他说这个temp recover模板引擎解析不好,原因呢,就是我们这个东西呢,我们要返回接层数据,而不是跳转页面返回接算数据,加一个response包注解就行,重新启动走。
22:39
好,那么现在呢,启动完成,我们重新来测试来刷新,我先来登录一下,还是这个act ID等于一的好,我们发现呢,我们数据查到了,那就是我们数据库里边的东西,当然呢,现在又有一个问题,U在ID没给我们封装上,大家看user在ID没封装上,没封装上的原因是什么原因呢?就是在于我们马贝斯默认没有开启驼峰命名策略,咱们数据库里边呢,我们这个短横杠,我们认为短横杠后边的这个字母是大写的,对应我们的这一块里边是大写的,这叫驼峰命名规则,但是没开启,没开启怎么开启,没开启从在全局配置文件里边开启,因为全局配置文件里边呢,我们来参照马布斯的官方文档,在全局配置文件里边查马尔配置在这个里边,其中呢,就有一些属性设置,比如我们的设置项,设置项里边呢,就有一个开启驼峰命名策略来找一下啊。
23:38
Use to camera on,哎,这叫map underscore to camera course,然后呢,大家看这一块呢,默认值是first,所以呢,我们既然有全局配置文件了,我们只需要在全局配置文件里边,我们来写上叫setting,写上它的设置项,设置项呢有一个项叫匹配驼峰命名,然后呢,我们来给它开启为处,我们来重新启动。
24:10
好,启动起来,我们再来重新测试刷新一下。来看atd,哎,我们发现user ID就封装上来了,所以以前马威斯该怎么用还怎么用,那在这个配置文件里边的所有配置也都能生效,另外我们这个配置文件里边呢,全局配置文件里边可能能配的东西有很多,按照官方文档这一堆,然后呢,这些配置我们有没有已经绑定到配置文件里边呢?因为之前分析MY的所有配置都在这my properties里边绑定着,然后呢,包括我们的驼峰命名也一样,比如我们的configuration里边,在这个配置里边,其中呢,我们就有一些东西啊,我们来搜一下member underscore to commonca,所以其实人家在配置文件里边的所有东西都是在这个里边有绑定的,那相当于我们只需要配MY。
25:08
Configuration下边,那么们相当于就改变了配总配置文件里边的东西,所以呢,我们也可以以另外一种方式配置,嗯,这个MY的configuration eight,第2CONFIGURATION下边的所有就是就是相当于改我们这个配置文件中的值,相当于改我们这个马贝蒂斯总配置文件,相当于改马贝蒂斯全局配置文件中相关的这个设置值,所以呢,其实人家在底层呢,已经把我们常用的好多东西全部都已经在这儿准备好了,所以我们呢也可以用另外一种办法,我全局配置文件这不配,我直接在压面里边所有跟马贝斯配置都在这放着,这是全局配置文件位置,哎,这是member的映射文件位置,这是全局配置文件位置,然后呢,我们所有的配置项,我们在这指定叫configuration configuration里边呢就有member。
26:09
我们的这个member来configu configuration。Con单词别写错,Configuration第2MEMBER我们的underscore to camera case,好,我们把它呢调为true,效果呢也是一样的来启动起来,我们全局配置文件里边呢,我们已经大家看啊,已经关掉了,所以呢,我们在这个压面里边,只要我们分析了源码,我们发现里边哪有问题,我们就可以在这改,但是大家注意啊,在这一块的设置它property的configuration和configuration location比,就说呢,你如果是在我们这一块写了它,你就不应该写它,比如说呢,我们全局对于全局配置文件里边的这个定义,你要么呢写到mys configuration里边,要么呢,你给他指定配置文件,这两个东西呢,看这两个东西不能with together同时存在,所以呢,一旦我们要用下边方式,你就把上边除掉。
27:08
把这个规则拿来,否则的话呢,他就不知道到底以哪个为准了,所以呢,我们在这儿有一个注意事项,我们可以不写全局配置文件,全局配置文件,所有全局配置文件的配置,全局配置文件的配置,全局配置文件的配置都放在我们的这个configuration这个配置项里边。都放在configuration配置项中即可,所以呢,我们后来也是推荐使用这种方式,我们最好能不写这么多的文件,就不写这么多文件,那我就呢把这一行注掉,那相当于就没有这个文件了,这个文件呢就没啥用了。那老师呢,也不删了,大家也可以作为一个模板,那我现在呢,重新启动来configuration这个里边呢,以后就来指定马贝蒂斯全局配置文件中的相关配置项,好我们这一块呢,准备好了以后,我们来重新来测试,也是效果一样的,来看它能不能封装上驼峰命名的值就行了。
28:25
好,我们来查一个ID等于二,好,我们发现呢也封装上了,没有任何问题,所以呢,这样我们就总结出我们整个马背斯的使用规则,三步走,第一个,然后呢导入我们的这个官方start,导入官方start my贝的官方start,然后呢接下来第二步编写member接口接口,然后呢第三步编写circle映射文件,映射文件并绑定map接口,然后呢第五步在我们这个application面中,Application在的application压面中指定member。
29:17
Member配置文件的位置,配置文件的位置,然后呢,也可以指定,也可以指定也以及指定全局配置文件的信息,全局配置文件的信息呢,我们建议建议不要写全局配置文件,建议直接配在配在配置在MY第2CONFIGURATION这个标签下就行了。好,你们可以在这个标签下,然后呢,最后编写member接口,Map接口呢,一定要干嘛一定要呢,标注我们这个at member to,写它呢就被扫描进去了,好这样呢会非常方便,那接下来呢,我们就来直接测试就行了,那我们的马威S就整合完成了,我们下一节课看一下我们纯注解模式该如何整合。
我来说两句