00:00
下面我们继续来学习筛定JDBC,刚才我们实现了用筛定GDBC实现水平分表,水平分库,那咱下面呢,来采用CGABBC来实验一下垂直的气温方式,比如咱们做一个垂直分库,那这里边怎么做,给各位写一下。咱们使用she定GDBC来实现垂直分库的效果,那垂直分库刚才之前讲到过,什么叫垂直分库呢?快速回顾一下,它就指的就是啊,我们现在根据业务把我们的数据库浩分成多个独立的数据库,里边有你的独立的表,真正做到专库专表,或者说专库专用。比如咱们之前举个例子,咱们的在线教育项目中,我们把课程建个数据库,里边有课程的循环表,把订单建个数据库,里边有订单表,这叫专库专表。这叫垂直分库,而我们现在就用筛定GBC来实现出这种垂直分布效果,那怎么做?我还是把这需求给大家做个分析,然后咱们来用这个NBBC把效果做到。
01:14
所以各位来画一下,我们要做成效果,比如现在在我们这个里边,咱肯定会有很多的数据库啊,比如里边有很多数据库,比如说现在我们里边假如说第一个数据库就是咱们那个,比如说叫user DB是一个。用户数据库,然后这里边比如有一个叫cos DB,是一个课程数据库,然后这里边还有一个叫ODB,是一个订单数据库,咱就以第一个为例,包括在课程这数据库中,比如说里边我们有一个这个用户表啊,就是user侧DB中有用户表,比如说叫t user,然后在别的数据库中也有对应的。不同的表啊,这是一种叫垂直分库,就是专库专表,专库专用,比如现在呢,我想做个效果,什么效果呢?当我现在我去查询这个用户信息的时候,怎么做,让他就去到这个user DB中找这个t user表把这个查出来。
02:20
当我现在要添加用户信息,那怎么做?他就到这个UDB中向TU中加这个数据,而他现在只要你操作用户信息,他不可能去操作课程数据库,也不会去操作订单数据库,只操作咱们的user DB库中的t user这个表,这种效果就叫垂直分库,就咱通俗说的专库专表。那我下面就按照这个过程,把这个效果给各位最终弄出来,做到专库专表,你访问用户部分就到用户数据库中去查用户表,你向里面加数据就操作用户数据库中的用户表,而不会操作加数据库,也不操作加表。
03:04
那怎么做,给各位写一下啊,第一部分是咱的一个需求给大家分出来了,然后第二部分按照这个,咱把这个数据库和表创建出来,比如说一会儿我们就建一个user DB,还有一个to,我在里边创建。啊,这个我之前测试的,我把这个先删掉,咱们重新创建一下。就是在这里边,首先我先来一个数据库,名字就叫做user DB。这是一个数据库,然后这个创建之后,第二部分在里边我们来创建一个表,表里边我们写上几个字段,比如第一个字段就是这个user ID,然后咱来一个就是b int类型,来一个长度20,它是一个主键,第二个比如写一个。Username就是用户的名称,我们来一个what,来一个100啊,那比如说我再来个字段是用户那个状态,我叫us。
04:07
这个也来一个。我差啊,然后来一个补时,所以这样的话,咱们把这表创建出来了,然后给表起个名字,我就叫T。User这个啊,完成了这么一个创建,就是咱们有一个数据库叫user DB,然后里边有个表叫T,然后咱们一会儿用筛定这BC实现专库专表,当你在操作用户信息的时候,它只会操作这个库中的这个to特表,而不会操作气压库中的气压表,啊这是我们的第二部分把库和表创建了。然后做到之后,我们看第三部分咱就要编写代码,而这编写代码跟之前一样,代码结构咱不需要额外的变化,也是按照这种过程把这做到啊,所以第三步咱就来编写我们这个具体这个操作的。
05:01
代码。那怎么写,给各位来写一下啊,首先你注意,因为咱们现在要操作是一个新的数据库,咱之前的这个工程里边只有这个课程这个十几类,包括课程的map,所以咱现在要对应咱们的user建个十几类,还有它的map,包括其他相关的配置啊,所以第一部分我写一下,咱就先来创建一个这个。User的实体类和它的map,把这个我们先串出来,因为一会要用到,那我在里边写一下。这些我先关掉,咱们首先在氨气包里边,我先建上这么一个类,这类的名字,我就叫。User,然后user里边呢,写上它的属性,第一个就是这个。User ID,然后第二个是这个username,第三个是他的这个状态叫users。
06:03
这个我们创建,然后在类上边加上一个date,注解是用它的get set方法,这是一个实体类创建出来了,然后创建之后在map里边咱们建一个针对user操作这个map interface,我起个名字就叫user。Map,让他继承一个类,就是base map。因为咱要用到这个my be plus,所以用它实验我们这个操作啊,把这个依赖引入,然后在上面加上一个不解交易使用管理,所以这样的话,把这两部分创建了,一个是右侧的实体内,一个是map。我把这个给各位。截个图啊,就是我们的这两部分。完成,然后完成之后,咱下面就是在里边呢,肯定还是要配置你这个垂直分库的这个策略,把策略要做配置,因为里边要做到专库专表,那配置呢,咱肯定是在我们的OB里边进行配置。
07:11
我写一下啊,在这个OB里边。就是点properties我们进行。这么一个配置,那我们来写一下啊,这个配置为了咱更明显,我还是这么做啊,在里边,比如说我再创再复制一份,把之前那个备份一下,我们叫。零二,然后在里边改成咱们这个专库专表,那这里边有很多这些我都变化给他还保留,因为咱们可以新加内容,那怎么做?因为现在我要操作是一个新的数据库,所以首先在里边我可以再加上一个数据源,比如给它起个名字,我就叫这个,呃。M0给它区分一下,然后M0写完之后,在下面写上我们的数据库的配置,就是把这部分再给它复制分写一下。
08:03
就是配置我们的D。三个数据源,然后里边这个叫M0,或者你叫M3啊都一样,我是想可以写成M0,为了更好看到啊M0,然后写完之后把这些改一下。这个连接池驱动地址,用户密码,然后这个地址写成叫user_DB。把这改一下啊。User角线DB,所以这样的话,这数据库的数据源配置完成了,然后配置之后,下面咱也是配置里边这个策略这个内容,但是这个策略咱可以根据它直接改一下可以了,因为现在做的是专库专表,那咱根据它改一下啊,我写一下就是。配置一下。你里边这个user DB这个数据库里边这个T。User这个表做到专库。
09:05
转表,那咱给他配置一下啊,用它改一下,首先我们看啊,在里边第一个地方,就这个表的规则这个地方。他之前叫cos,咱们现在应该叫这个T,是不是user,把这个都改一下,改成我们目前这个表啊,这个东西,然后给它先改完,然后再配置里边的细节,改成都是t user,咱是专库专表啊,都是操作提这个表,其他的不需要变。主要是这个地方,然后写完之后,咱看后面首先第一个就是你设置一下你那个表和库的这么一个分布的情况,这个啊。分布情况我就不写注式,之前都说过啊,然后这个情况大家注意,因为现在是专库专表,它里边数据源就是这个M0,或者你直接来M0点一样的,我现在用表达式来写,后面加上你那数据库,但数据库是固定的,就这个M0里边这个表T词,这是表示你的这个库和表的这个分布情况,咱是M0库里边的T色表是固定的。
10:11
然后第二部分是你的主见,包括它这个策略,咱的主见就是UCID策略,还有这个角化算法,然后下面是里边这种规则,根据user ID。但是我强调,因为现在呢,我们只一个垂直分库,并没有做到水平,所以这里边这个表达式中,咱就可以直接写什么,就写引到表的名字,就当这里边你一操作右侧这个表,或者右侧这个数据,那怎么做,他就找M0里边的T,右侧表向里边做操作,所以它的规则就是一个简单规则,这是真正做到专库专表,主要就是里边的这个配置。啊,所以咱们现在把这个就做到了,我把里边这部分给各位也是直接分过来,我就把核心地方分出来。
11:01
啊,主要就是这个部分。拿到的课件中,这样的话咱就完成了专库专表,当你操作user,它就到这个M0里边的t user表中做我们的定操作,啊,这是里边的第二部分。然后这个选完之后,咱们最后肯定还是写测试代码,最终就完成啊,那我写一下啊,就是第三部分。咱们编写。测试代码把这个最终选出来,那咱们写下啊,就是现在写法很简单,咱就是向里边加数据,包括查数据,它都会找这个user色DB中的T表,就是M0中的T色表,根据这个数据源和表情操作,因为咱们写了里边的这么一种策略啊,这叫垂直分库专库专表,那最后写下啊,咱们来到这个测试类中,在测试类中呢,首先我们还是先做个注入。
12:00
因为它是一个新的map。User的。Apple。好,我们写一个叫。Private user map user map,然后下面我们就来测试一下这个垂直分库。写一下啊,垂直分库。这个是我们要做的事情,那里边咱们也是写两操作,一个添加一个查询,我就用之前的给它复制,咱快速改一下,因为结构都差不多,值里边的调的过程需要变一下,第一个比如叫A的。右手,然后第二个我就叫这个find。User啊,因为咱们是添加查询,那添加里边他写的肯定不是这个,我把这个去掉啊,因为咱是操作user,那我来一个user,等于溜上一个U色,就是先六个对象。然后向user里边设置它的值。
13:03
第一个username,比如来一个比如就叫。Lucy了,然后再来一个这个状态。状态先写一个啊,就叫这个呃,A啊,就来一个A了,它里叫idd来用这个策略,这个生成,然后咱们调user map中的inser的方法,把这对象传进来,这样的话能实现一个添加。各位注意啊,现在咱是操作user,所以我们用这个user map user是一类调这个方法进行实现,你别再调这个Co map,因为咱是操作一个新的表,新的内容,这样的话把这个添加完成了,包括查询也一样,那查询方法咱给他快速写完。各位看啊,在里边咱就直接根据这个user ID。这个查询,然后这个ID,比如说咱们给他找一个ID啊,然后最终调这个就是user map中等。方法。
14:01
得到你这个内容,最终把它做个打印,这时候我们写的两个基本方法,一个添加一个查询,那选完之后咱们最后来测一下这个效果,各位注意啊。如果说效果正确的话,你再做添加,那怎么做,他就做到专库专表。找到M1数据源中这个t user表,因为咱们做这个设置,如果你查询查这用户信息,也是找M0中这个t user表进行查询,所以我们现在先做一个添加,先看一下效果什么样的。再来试一下哈,看一下什么结果。等他执行。啊,各位看啊,我们一执行发现啊,他最后报错了,大看报的什么错,大家看什么错,Missing是不是缺少,说缺少这个data source,就这data source这个名字等于空,也是目前应该是咱们数据源或者操作数据库中有一些问题,那咱检查一下看它是哪里问题。
15:07
首先在咱的配置中一般应该没有错,但是有一个地方各位注意啊,给大家强调问题在哪里,你注意咱之前操作cos的时候,就是我们那个。Cos这表的时候,咱的cos表是不是叫cos下限一,Cos下限二表,所以我写那表这一类的名字叫cos,但是现在我这user表的名字是不是叫T向user色,所以现在什么问题,就是你这个user色实体类,它并不知道它对应的是哪张表,因为规则不一样,我们的表叫T,相信user,我这名字叫user,他找不到你要操作是哪张表,他目前是这个问题。那他需要怎么做,让他指定下user是一类,对应的是哪张表,你不指定,它根据这个命名去找这表,比如你的表叫user,那没有错,但你不叫U,你要T条件user它找不到,咱需要指定下,咱们指定加一个注解。
16:07
Table里边Y加上你的。表的名字就这么来做,这就表示指定你对应的那个表,咱需要这么来做,加上这个注解,然后加上之后,下面咱们把它再执行一下,看一下结果啊,咱来测试。各位啊,来观察一下。目前的效果,因为刚才是报错了,现在我加那个注解之后大家看。目前没有错吧,包括咱看啊,这里边先看数据。是不是有了Lucy加进去了,这个没有问题,然后咱们看一下它底层那个日中,大家会发现啊。找的谁,M0表是谁,是不是T,他就找M0中的t user表向里边加数据,做到了专库专表啊,所以它里边添加。
17:01
然后添加做完之后,咱再看这个查询,查询呢,我把ID咱们复制过来到我们的这个位置。然后咱们把这个方法执行一下,看一下结果。咱们来执行。我们等他行出来。然后大家看数据查出来了,咱们看啊,他现在找的是M0这个数据源中的TU这个表,是不是做到了专库专表,所以这就叫做垂直分库这么一个效果,专库专表咱们把它完成了,然后在里边各位就特别注意刚才遇到的这么一个问题,我把这个给各位。直接分过来啊,就这一个点,各位要注意一下,你在写实体类的时候注意啊,在这里边咱可以指定一下你实体类对应那个表是哪张表,如果你不指定,还有你名字匹配,但你名字如果规则有问题,那你需要指定一下,刚才咱报的错,就这问题造成的这个,各位注意,然后另外咱这测试代码也是两个最基本代码,一个是添加,一个是查询。
18:13
但是过程中咱需要把那个user map注进去,然后最终完成这么一个效果。所以这样的话,咱们现在把这个就做到了。也就是说用筛定JDBC,咱就实现了水平拆分,还有垂直拆分,这些咱们通过它都可以进行操作。啊,所以各位把这些相关的代码要特为数列,而在这过程中,其实比较核心的都是在它的配置文件中做这个配置,包括你的分库分表,各种策略配置,以及你的专库专表该怎么去写,刚才我在里边应该都演出来了,所以这样的话,咱就把这个JDBC,分库分表这些基本操作应该都完成了啊,各位能给它独立按照这个过程给它能整合出来。
我来说两句