00:00
好,接下来我们说一下,哎玛贝蒂中咱们这个批量操作的这个事情,那么这个批量操作呢,有些同学说,哎,我们之前不是已经说过吗?咱们动态circle的时候点开,诶这里边呢,我们动态circle,我们在保存的时候做过批量保存,我们来可以看一下。往上翻,好,这是O入口的保存,我们以满色库的为例,哎,我们在这里边呢,做过一个批量保存,这个批量保存呢,我们可以Y6S,哎,我们把要保存的数据放在一个list里边,使用c for each给value拼小括号,拼好串一串,或者呢,我们也可以用另外一种方式,哎,我们那种方式呢,就是凭我们circleq语句,哎,在这把这个circleq语句,把每一个保存的circleq语句用分号隔开,第一条circle口分号,第二条S口分号,第三条S口分号,严格意义上来讲,这两个都不算批量操作,这两个呢,是会拼一个非常非常长长的咱们这个circleq语句交给我们这个my circleq交给我们这个数据库服务器,而我们这个数据库服务器,它是不能接收太长的这个SQL语句的,然后说呢,在实测的时候,比如我们这个以分号啊相分隔,咱们这个SQ语句可。
01:20
能1000来条SQ语句就已经爆满了,那么如果我们这个批量执行的话怎么办呢?哎,马贝利其实在批量执行的时候,它有批量执行器,我们来到我们这个官方文档全局配置中。有一个setting项,我们在看源码的时候说过,就是这个default type,它呢默认用的是simple,这个simple呢,它会创建一个简单的excu,这个excu呢就是非常简单的这执行增删改查方法,没有什么批量功能,而呢有一个取值叫半尺,它呢能创建一个能执行批量S口的这个批量执行器,然而这个批量执行器如果我们去全局配置里边来一改的话,所有SQ语句执行都会被改成批量执行器,所以说我们不这么做,不这么做我们来怎么做呢?好,我们把以前的这个保存方法我们拿过来。
02:21
我们把以前的咱们这个对保存方法的定义,哎,我们拿过来,嗯,假设以保存员工为例,好,这是我们这个保存员工。那么这个保存员工的实现呢?我们也拿过来保存员工的实现,行,我们自己写吧,放在这。好。这是一个insert标签啊,保存员工,然后呢,我们把保存的SQ语句,我们可以啊,从之前的复制过来,保存的咱们这个SQL语句好就是它。这是我们员工保存的SQL语句。
03:00
好,我们现在想要的做法呢,我们来看在这一块我们来测试一个保存操作。Public VO,咱们这一块呢,测试test,咱们这个测试我们这个批量操作,以前的批量操作呢,哎,我们是啊,想着用c for each传一个对象,嗯,传一个咱们这个员工的list,然后呢,把这个SQL语句拼的好长好长,那这种会有问题,我们数据库不接受太长的,接下来呢,我们用我们新的方法get circle session方,好先拿到我们circle session方,然后呢,我们来open session。Circle session factor.open session,我们一直呢调用的是这个open session,而我们说批量执行的话,我们可以在全局配置里边可以来更改ex的类型,让它成为一个批量执行器也行,但是这样代价有点大,全咱们这个全部用的这个执行器都是量的,我们可以在每次获取open session的时候,我们来告诉你拿到一个批量的,好,我们来circle session factor.open session,大家来看会有很多方法,就有一个能传一个ex type,诶这type呢,我们可以来写一下xcu type,诶这个type里边呢,就有一个半尺,我们拿到的这个circle session就会是一个批量。
04:32
可以可以执行批量操作的,咱们这个。好,我们拿到这个session呢?我们来保存员工open session.get。好,那拿到我们这employee member class。我们来测试保存,员工我要批量保存,批量保存呢,我们一般可以这么来保存。
05:00
Finally。里好。我们调用member的添加一个员工,你一个employee对象,这样的话呢,它就会保存一个你一个employee,哎,我们这个employee的有参构造器呢,嗯,Employee。好,怎么是无参构造器,我们把这个有参构造器也拿过啊,我们来给它创建一个有参无参,我们都给它创建一个,诶点错了,有参构无参构造器,这是一定要创建的有参构造器,哎,为了我们方便使用好ID不要,那么接下来呢,我们在new employee的时候,哎,我们可以传入我们这个last name,比如a email。哎,真的一等我们可以传入这些,但是呢,我们这么一调用,然后我们提交open session,一提交以后,它只会保存一条数据,没有什么批量存储。
06:00
第二,Close,那么呢,我们来可以模拟一个批量场景,我for each,哎,我来便利,我让它呢保存,我批量执行上,比如我来1万条数据,我做一有1万次插入。这个插入呢,我们来插入1万条记录,当然了这1万条肯定employee这些list我们是做好的,我们在这一块呢,做一个简单演示,这块呢,比如我用UUID来拿到u u ID random u u ID点图词砖来,我们插入呢,我们来太长了,我们截取一下,好,我们呢从零截到五,我们截取这么几个字符,作为咱们这个呢,员工的名字,那么员工的email什么的,我们就先固定了,我这样的话呢,我。调用上非常多变的这个员工添加方法,我们来测试一下这个批量插入。好,你看啊,我现在用的是这个批量执行器,我们来保存。
07:00
包村上1万条记录。我们来看。这1万条记录呢,大家会看到这块打印了非常多的prime,哎,这就是设置参数的方法,而S语句呢,它并没有发,哎,等一会我们来看啊,这1万条挺长的,哎,已经执行完了,这只很快就执行完了,哎,我们这个数据库里边也会有数据。它的这个执行时间呢,我们刚才忘了没记录。走。走你看啊,我们来往下翻,哎,这里边都是有会生成的数据,我们这一次呢,我们来记录一下它的时间,来,我们先获取一下开始的时间C。第二拿到咱们这个开始的时间。好,整个执行完提交以后,我们拿到结束的时间。哎,点可润。
08:00
好,我们来可以看一下执行用了多长时间。执行。时长,时长这个直我们用用P档执行器执行的时长呢,我们来看一下N的减去start来,它是以毫秒为单位的啊,我们再让它插入1万条。走。好,马上做完就有百四千多毫秒。也不慢,但是如果我们来看啊,但是大家看的话,控制台一直都是只打印设置参数,哎,这块预编译参都是这么来打印的。批量。哎,我们在使用咱们这个批量情况下,我们控制台呢,一直都是打印这这一句话,哎,设置参数,然后呢,它用了4000多毫米,如果我们用我们原生的。
09:00
这个执行器,好,我要保存这1万条记录。可以做一个简单测试走。但是大家看控制台。控制台呢,是每发一条circle,哎,这有一条发送circle预编译执行,发circle预编译执行,哎,整个执行时长你看会非常长。啊,要要咱们这个刚才10200。真皮的。这个呢是10200,哎,现在呢,只在1万条的时候,就多了将近三倍的时间,那么10万条100万条那就是非常长了,而我们非批量执行的方式呢,就是来每执行一个方法,执行一个增删改查,立马发给SQ数据库,发完以后呢,让数据库一执行,我第二次遍历,哎,第二次再来插入,再发给数据库再来执行。而我们批量的方式呢,非常简单,把SQL语句先越预编译好,给这个SQL语句里边呢,不断的设置参数好,也就说呢,这个SQL语句发给数据库,数据库可以预变一行,接下来数据库就只等待这些SQL语句要执行多少遍用的参数,把这些参数发给数据库,数据库呢直接一次性就执行成功,而不是像我们以前非批量方式发一条circle预,编译一下,设置参数一下至一,执行一条circle预。
10:33
E设置参数在执行,所以说呢,我们之前的非批量方式是非常麻烦的,哎,他呢会散布咱们这个预变1S。EXS,然后呢,咱们这个啊,设置参数,然后再去执行,哎,而这个整个过程你调用了1万遍,就会执行1万次。哎,这个就是一个1万次的执行。而我们如果是批量方式呢,它这个哎,它就会非常快了,我们刚才也看到了这个发送circle只发送一次,发送一次哎,预编译一次。
11:16
预编译色口一次,而这些整个流程都得1万次,这个预编译口一次,然后呢,咱们这个设置参数,设置参数这一块呢,我们得哎1万次。1万次。因为我们得执行1万遍,接下来交给数据库去执行,数据库呢,它是以批量方式的,所以说一次性执行成功,那么咱们这个啊,时间就会非常节省的,这就是我们这个批量啊,我们open session的时候,我们可以获取一个ex type点干好,这是我们在这里边测试用批量,如果与码与我们spring整合的话,怎么办呢?我们来到spring的官方文档。
12:02
大家来可以看,哎,不是死通的官方文档,来到我们之前的整合项目,这个整合项目里边呢,哎,我们在这里边。在这个里边,哎,我们呢,是创建了一个啊circleq session番being,这个circle session翻being应呢,它就是咱们这个circle session放水对象,我们一般整合的时候,我们给这里边可以配置一个可以进行批量。执行的CIRC,而这个配置怎么配置呢?哎,我们放在这,哎,Being class配置这个circle session呢?啊,我们整合包里边有一项叫circle templ,哎,就是这个东西。ID。而这个circle session temp呢,哎,我们来看啊,我们要把它做出来,它需要一个,哎,咱们这个有参构造器传入circlerc session factor,所以说呢,我们在这利用构造器的方式construct a好,我们给它传入CIRC session factor对象,好,然后Y六指来我们指向诶指向我们刚才配的这个circle session,比如说呢,用我们这个circle session factor来创建一个啊circle session session对象,而这个对象呢,我们来给它指定。
13:30
你创建的时候用的excu type,哎,Type用的ex类型,哎,我们给它指定成代,这样的话呢,我们给咱们这个全局配置文件里边专门来创建一个能用来批量执行circle的circle session,以后怎么用呢?只需要来到我们这个啊。Do,咱们这个接这是我们do接口来到我们这个service下,如果我们要批量的添加了,哎,你只需要非常简单给这里边O一个circle对象。
14:06
Circles。好,At让它自动装配circle session,然后呢,我们这个circle session就是一个批量的circle session,你就可以在这里边调用circle session.get member,哎,你拿到我们这个,比如employee member,你调用它的增删改查方法,哎,那添加修改这些,这就是一个批量添加修改,所以说呢,大家就可以这样来用好留给大家的这个方式,哎大家呢,注意一下,也就说呢,我们批量的时候呢,我们推荐如果与spring整合,那么呢,你就给spring配置文件中,把这个批量的s session配置出来以后呢,自动注入就行了,这个circle session,虽然它叫circle session,点进去大家来看实现的接口就是我们my circle session,所以它就是一个circle session对象来,我们自动注入就行了,好,这就是我们执行批量的时候需要注意的事项。来,我们用专门能执行批。
15:10
的这个批量。
我来说两句