00:00
好,我们来看一下这个database ID provide这个标签,诶我们说这个标签呢,诶,MY可以执行不同的SQ语句,根据不同的数据库厂商有这个标签,相当于就是MY在一致性方面的一个支持的考虑,那么在一致性方面我们都知道,呃,这个harber net是非常强大的。我们可以根据不同的数据库厂商har net发出不同的SQL语句,而且这些circle语句呢,都是har net框架自己发的,我们不用写,而在MY贝斯中,SQL语句都需要写了,它如何支持多数据库厂商呢?诶,也很简单。你只需要告诉MY贝,你写的这个SQL语句是哪个数据库厂商下的,那我们买贝就可以动态的根据库,根据数据库厂商的标识来发送不同的SQL语句,那么这个功能的支持就需要在我们全局配置文件中添加database ID provide这个标签。
01:12
那正好呢,我们来打开我们这个测试,在这一块呢,我们employee map里边写了一个查询,而这个查询我们是在my circle环境下做的,那现在我想让这个查询也能支持Oracle。那么Oracle呢,我这里边儿正好有咱们这个啊Oracle数据库,我们来连接一下。好,我这个Oracle数据库里边呢,我们这个Scott用户也有。一些测试表。安装好Oracle以后呢,它会给一些测试表。这个测试表里边。我们来看都有哪些表好,这个表里边儿呢,就有employees这张表,那么我呢,就把这张表查出来。
02:07
来看一下这张表里的数据。Is。好,这张表里边呢,107条数据,也有员工ID,员工的last name email啊,但是呢,我们往下看,没有真的信息,你就暂时先不管好,我现在的需求就是你这个按照ID查,员工方法在my circleql下给我找到MYSQL这张表,按照ID查,如果在Oracle环境下,那自然嗯,就是employees这张表了,所以说呢,我们来看这个功能如何实现。第一步,我们先在我们全局配置文件中。写ID provider,因为它有了它就能支持多数据库。厂商,它是支持数据库厂商的。
03:08
它是怎么支持的呢?我们就来看一下,在这个type,哎,写了一个示例里边写的是DB温,好,这也是固定写法,我们就写在这type等于DB window,那么等于DB window的意思是什么呢?哎,那这个type能这么来写这个DB window,它其实也是一个别名,来到configuration类里边,在这个类构造器里边我们都可以看到,诶这里边注册了好多别名,DB温就是其中一个。就是这个类。那么呢,它的作用,它的作用。就是根据就是得到咱们这个数据库厂商的咱们这个标识。然后呢,MY?
04:01
就能根据数据库厂商标识。来执行。不同的色。那么数据库厂商标识啊,我们都知道这一块呢,是。这个数据库厂商标识是这个驱动自带。是驱动。他自己带的,比如呢,我们打开JDBC,再看我们JDBC规范里边。如果我们拿到了一条链接。Connection,那这个里边有一个叫get me,它会返回一个。在这个Meta data里边呢,就有数据库厂商标识,我们往下。我们来看,哎,就有get database。哎,这就是能拿到我们这个当前数据库产品的这个标识。
05:00
那么呢,我们来说,因为每一个数据库产品的标识不一样,而且呢,有些都挺长的。我们这个my circle它的标识,哎,就是我写的这个my circle,大家下边也可以测试出来,Oracle呢,就是这样子。来,比如呢,Circle server,它的标识就是这样子,等等等等,会有很多的数据库产生标识。如果我们要用这些标识呢,可能有些比较长,用起来比较麻烦,我们可以在这个database ID provider里边。来为每一个数据库厂商标识起一个我们比较好用的短一点的名字,比如我为MYSQL起名叫小MYS。好在这一块呢,是为不同的数据库。不同的数据库厂商起。咱们这个别名啊,我们这个MY,我就叫小马S。
06:02
好,我们这个Oracle a少了个L啊。那么这个凹入口呢,我们就叫小凹入口。好,那完了以后呢,比如我们还想支持circle server,那么呢,能给circle server也起一个别名,比如呢,我们就叫circle server。好,这样呢,我们起好别名以后,接下来第二步,你只需要来到map映射文件中告诉MY贝,这个circle语句是哪个数据库厂商情况下发的,而我们这个呢,是在Oracle环境下发的,怎么告诉呢?Select标签里边有一个属性叫database ID,而这个ID就是来写我们刚才起的这些别名,哎,比如我来写my circle,哎,这样就是表示我们这条circle是在my circleq环境下才使用的,那么呢,我在Oracle环境下还是这个方法,按照ID查员工,我想在Oracle环境下来写另外的circle语句。
07:15
我们来写上。那么这个方法呢,我们再写一遍返回值类型。啊,还是我们employee对象,而我们这里边。是。咱们这个Oracle环境下,我才发的circle,那么这个circle呢,我们也写在这select,我们就不写select行了,我们都用起别名的方式,因为这里边每一个字段啊,都不怎么对应,好我们查出employee ID。它的别名就叫ID。我们再来查出。我们这个firstname,好,它的别名就叫,诶,我们查出lastname吧。
08:02
啊,对应起来,它的别名呢,跟我们Java音字段对应,来,我们再来查出email,它的别名跟我们Java字段对应from。我们是employees这张表,Where,我们带来的ID。我把这个分割一下就好看了,ID等于传进来的ID值,好这个方法呢,相当于我写了,哎,两种实现,一种是my circlele环境,一种是Oracle环境,我们就可以动态的切换测试好来看啊,现在我们这个环境默认使用的是development,哎,是MY环境,正好我们结合这个environment标签啊,配上两个数据库。好,这是JDBC,我们买circle的,那么我们呢,再来配一个Oracle的,比如我们就or CL的。Oracle的这个驱动,这个驱动呢,我们先倒过来,Oracle的驱动打开,在我安装Oracle的位置。
09:07
好。Oracle,然后呢,Product产品好进来这里边呢,往下翻有JDBC好,Li好,我们就是这个驱动。Oracle JD bc6,哎,它是JDK1.6版本的驱动五是1.5版本的,好来把它复制进来。Yeah。Build pass进来,好,那么Oracle的呢?我们就来写一下,它是我们这个or Oracle?点JDDC点。哎,是这个类,大家也可以打开这个包哎,进里边看or入口JDBC入口罩。Oracle travel,诶就是这个我们要用的是它,好,那完了以后呢,那我们再来把那连接地址这些信息我们都写上,比如Oracle的咱们这个URL地址来,我们这个ul地址是jdbc Oracle。
10:09
Oracle来,我们使用这个。冒号。我们这个主机名local host好冒号,我们端口号。好,连上我们or CL数据库,好,我O入口下连这个好,那接下来呢,我们再来配上。用户名。Scott。好密码。C。我也是123456好,我在这里边呢,在全球配置文件里边配上两个环境,第一个呢,我们就叫MYSQL环境。好,我们现在用的是MYS扣,第二个呢,我们就叫口。
11:01
那马口开发环境啊,这个ID随便给啊,不是我们刚才起了数据库厂商别名的这东西,这个ID我们随便给啊,啊然后呢,我们来切换到先来切到Oracle环境,好,Oracle环境这些值我们就得取出的是or CL。是这些值。我们来测试一下。那么动态切环境的时候,来测试一下,能不能产生咱们这个不同的色,好我们现在来看啊,Default现在呢,是Oracle环境。切到Oracle环境。走。哎,我们来看,首先发的SQL语句是对的,哎,这个语句是对的,说明这个环境切出来了,那么这个问题的原因我们来看一下。说这个circle语法异常,ID标识无效哦,这个在or入口情况下它还是有差异的,哎,我们这一块呢,虽然给employee ID字段给了一个ID,但是Oracle是不能引用这个字段名的,好,我们在这一块呢,哎,就来直接写这个字段。
12:18
走。啊,查询没问题,来打印,但是这个封装出来哦,我们查询一号记录是没有的,所以说它打印呢,然我们这个数据表里边,我们来看一条有的记录,比如204。来到测试类里边,好,我们查询的员工204号。看一下能不能封装成功走。哎,没问题,Oracle环境下我们也查出了,哎,他发的语句是这种的,我来再来切成mysle环境。好。只要把MYSQL环境的ID给我放过来,我来切,我再来my circleq下,我们就查询一号员工。
13:02
我们来看一下。好,也是没问题的,Circle语句是在my circle环境下发的,这种circle有就说呢,通过这样我们买贝蒂斯就能提升它的一致性,你只需要做的事情就是告诉我们买贝蒂你这个。语句是在什么环境下才发的?完了在全局配置文件中写上DB ID provide来支持这种环境就行了,好。而且呢,我们重要的一点,我们还可以写上三种实现。相当于对get ep8D的这三种,这三种的话呢,它的规则是怎么样。它默认呢,就会加载所有不带咱们这个标识的,以及带了我们呃具体标识的,比如我们当前是MYSQL环境,它会加载所有带了满S口标识的SQL语句,以及不带标识的SQ语句。
14:08
而我们现在有两种。在我们MYSQL环境下呢,它就会加载更精确的这一种,就是说不带标识的会被舍弃,哎大家注意一下啊,如果有一个方法啊,有两个,一个是不带标识的,一个是带了标识的,那不带标识的自然就会被舍弃,好我们来看也是没问题的走。这就是我们马贝蒂斯对多数据库厂商的支持,我们就是这么来用就行了。
我来说两句