粉丝6.8万获赞41.3万

来分享一下在 mapsa 中啊,真正的一个漂亮插入操作因涉事变成商务靠了吗?啊?然后为什么说他是真正的,而这个 cube 是不是啊?首先我们在买社会中啊,我们可以看到 啊,他的音色特的这个语法其实是支持一次性插入多条数据的,这个其实就是我所说的一个真正的插入,这样的话效率会比较高啊, 那基本是他做的是什么?其实他只是啊把一条一条的插入给我们进行了一个批量的提交,而我们在他的原码中可以看到他的一个似乎筛选其实会切换到了一种啊批量的一种模式, 所以说,呃,真正的插入其实还是我们的这个啊,因此和变速箱不靠拢。然后呢,我们这边有一个测试类啊,然后我们来稍微测试一下这两种方法,一个就是随便选一个,就是啊啊这种批量的差的一种方式,然后别克利斯特就是 构建了一百个学生数据啊,供我们来插入。好,然后我们这边来执行看一下,可以这边执行完成,可以看到,其实我们通过这种啊 instantcom 的形式啊,它的效率会有一个提升啊,虽然说测试类的 这个时间不是很准,但确实是有一定的效率上的提升。然后我们来看一下这个日制的一个输出啊,这边的一个数据,其实这下面三行日制其实是我们的这个 啊,批量他的一个输出,而上面其实就是这个买 btplus 的一个 cubes 的一个输出,他其实就是把多条啊音色和语句做了一个提交。然后呢,我们来看一下这个啊,好了,打印出来的这个收口 啊,因为我们这边的字段有点多啊,但是也可以看出来我们这个 yus 后面其实是拼了多个的一个数据,对吧?通过这种方式达到一个速度 一个提升啊,那有些小伙伴可能会说啊,哎,这个东西他怎么没有见过,对吧?因为他其实是要单独去配置的。呃,我们可以在官网上能够找到这个接口,他也说了相应的一个使用方式,他并不是在我们的核心包里面呢,你需要去额外的去啊,装一个 包在这个拓展包里面呢,你用这个包之后呢,其实,呃还要去配置一下他的一个注入器 啊,在这边你要去继承他的一个注射器,然后把我们的这个方法给他加进去,然后呢把这个 助器给他扔到容器中去,然后呢我们去重写他的一个 base micro, 然后你后面你自己的一个 micro 是要继承这个啊,你自己重写的一个 micro 的话,就具备了这样提亮插入的一个效果。但是我们要注意的是这 就这样他他仅仅是在埋塞户中是可以用的,如果用其他数据库的话啊,并不一定是不是好使,买票就这么学习就可以。好,后面我会给大家去对比一下这几种插入的一个效率。好吧,今天的分享就暂时先到这里,我们下期再见。

这期我们再来分析 mabatas 的动态标签之 forage。 forage 元素的属性主要有, collection, item, index, open separator、 close, collection 可为数组或者列表。当 collection 为数组时, item 为基础类型名。当 collection 为列表时, item 为对象类型,可以按 august 表达式取值。例如, item roll, it oben 和 close 为循环内容,开头即结束拼接的字符。传 separator 为每次循环的分隔符。通过 my batista forage 标签,我们可以实现批量操作数据。

呃,哈喽,今天给大家分享 my bets plus 当中的一个批量插入,我们都知道 他的一个 basemapper 里面没有我们的一个批量插入,只有我们的一个 insert, 所以说我们要怎么实现他呢?需要我们自定义一个 circle 注入器,然后添加他的一个批量插入的一个方法。啊, 好,我们看一下他的一个运行效果啊,这里我们有一万条数据,有一万条数据,我们运行一下他的一个单元,测试看一下他是否是真的一个批量插入。 好,已经已经保存成功 啊。如果大家想要这样的一个呆萌或者之前的呆萌的话,可以在我们的一个评论区回复六六六。好,谢谢大家。

好,今天给大家分享一下在 maibeix 里面啊,它的一个批量方法是由奔驰啊,就是那个稍微使直接提供的一个批量插入它的速度比较慢的一个问题的解决方案啊。 啊,这边我们通过一个测试类啊来演示一下这个情况啊,这边的话一共是五行代码,第一行代码其实是用来生成数据的一个利斯特往后往里面插入了一千个学生数据啊,然后我们进行一个时间的一个记录,然后执行这个思域问题,这个思域问题的话就是, 呃,买贝特斯 plus 携带的一个 suv 奔驰啊,然后呢输出一下它的一个耗时,然后我们这边可以看一下我们的数据表,大概是这么多自断,然后自断的长度也都在这边了,在没有加其他的一个缩影啊, 然后嗯,我们来看一下他的一个默认的一个执行时间, much, much, much later, ok 啊,这边可以看到在没有进行任何优化的情况下,在我这样的一个网速,以及在埋塞扣五点七的一个状态下,他用了是四十一秒多的一个时间去插入完,然后这时候呃我们给他稍微做一下优化,其实这个优化也比较简单,我们只需要在这个埋塞扣的一个 啊连接的时候,在后面去加上这样一个配置啊,就是 readythe 奔驰的一个 status, 然后你把它设置为一处,他就会啊进行一个批量的一个提交的一种模式,他就会速度比较快一点,然后我们再来看一下效果, ok, 执行完成。呃,这边其实可以非常的明显的能够看到它的速率有了一个非常大的一个提升啊,这因为都是基于我自己电脑的一个对比,它的速度可以说是提升了将近四十倍吧。 啊,我们在用它的批量方法的时候一定要注意加上这个配置。好呃,今天的分享就到这里,我们下期再见。

音色之后我们来说一下啊对, i best pass 的啊,对呢,有提供了两种方式,一种叫啊对吧 id, 一种叫做啊对,那这两种有什么区别呢?先看第一个叫啊对吧 id, 通过他名字也大体能猜出他一个操作逻辑, 使用以 id 作为更新的条件来去更新你指定的这个实体对象。好,我们的需求是这么一个逻辑,把 id 唯一的员工姓名改成这个张大三, 看这,哎,怎么玩呢?看这边 ctrl c ctrlv 来,要这边改一下叫淡定 by id。 好,这些呢,都删掉,都删掉,读一个就够了, 删掉。好,你先看一下他的 ad 八 id 怎么写的。 ade 八 id, 他要求是一个员工实体,那你先把一个员工实体给我,我啊,里面要做啥动作呢?你想改啥,那你就明确来指定一下你想要改啥,第一 id id, 那先指定一下你的 id, 第二个你想要改改中改动的这个念换成我们对这边所要求的叫张大三。那改完好,一直行, 好,在执行没刷新之前我们先把这个神仙原数据先解下留下来。 哎,这位置好,当我们改动之后你再来刷新这条数据,刷新一下好, 数据在这来截个图。好,大家对比一下最初改之前改之后他数据发生什么变化。前面这个嫩变化了,那里面下面这个这些这些这些都没动,唯独这个 ag 跟啊的蜜这两个属性是变了哦。啊?怎么一回事?怎么我们在更新这个字段的时候把这里面这两个也改了呢?啊,你这个时候你想知道什么原因?咱是不是看他说口语句,观察一下他打印出来一个说口语句是怎么一回事?看着 啊,对这个员工 sad name h adami 还有个 id 诶,是不破案了喔, 我们本意只需要改动这个嫩脸里面数据,但是呢,它拼接了一个 ag, 还有这个的命,那这是怎么一回事的呢?啊?这时候就是得你想要了解,那就涉及到 i best plus 的一个收口拼接的一个逻辑了,或者说是拼接的规则, my bad teeth got plus 的一个 circle 拼接规则 好,第一个规则就是如果实体对象作为我们的操作参数 好,首先他会做啥动作呢?会判断属性就改了 属性或者是其他属性判断的属性值是否危难,如果不危难,如果非空非难,该属性 该索性好参与我们的收口拼接 好,大家可以看一下 我们这个二代里面拿 id 跟我们这个 name, 他是不为空的哦,所以 id 跟 name 这些是不是参与顺口拼接,特别是这个 name 里面是不是参与进去了啊?下面这个帕斯沃伊妙,还有迪斯帕门 id, 这三个 是不是都是为空的?默认不给值的时候是不是都为空?为空了之后他有没有参与?没有,所以这个呢,该属性参与的,反之参与 好参与。那问题来了,为什么 a 举跟啊的命就参与呢?这时呢,这时候呢,就涉及了他第三个把,第二个规则, 如果这也是上面哈作为一个参数啊,如果属性是一个 属性,是常用的,要基本的类型多属性类型是基本类型, 八个基本类型记得吧,那么有默认值,有默认值 my back is passed 呢?好认为认为是有值的 啊,那么爱索性 参与我们的思考,并肩像这个 a 举跟 adam me, 它是一个基本的八大基本类型,硬的类型就认为,哎,你有值了,那有值怎么办?赶紧加到我们这里面去。 a 举跟额的命,他本身默认只是一个零零零,那对应上当你在说口 操作的时候,他认为你这个零就是你所指定的数据值,需要更新的数据值啊,他就拼接进去了,一拼接进去的时候我们在啊,对的时候,他是把我们这个零跟零塞到我们这个位置啊,这时候就出现我们说传输丢失这种说法出来了,所以这点要注意一下, 那该怎么办呢?出现这个问题,那就我们解决方案。好,这里面呢给出三个解决方案,大家可以看一下 第一个方案,还有第二个方案,还有第三个方案。先看第一个方案,也是最简单的一种方案,将将基本类型 改成封装类型,这个怎么理解?我们对应哪个? a 举换成 n, 先是硬类型,换成红色 integro 类型,这个就是拍一个。第一种就是方法, 那改成他为什么就可以解决我们的问题呢?你先来看一下,好去执行一下, 好观察,他打印了一个最后语句,大家他背的时候有没有明确指定 自动拼接我们这个 a g 跟这个阿德米呢?没有没有,说明沙拉那效果,这不就出来了吗?好,为什么呢?看着 a 三用了包装类型,他默认纸就 不是零了,而是一个空字,一个难字,那就符合我们上面这个规则,当你为空的时候,他就不需要拼接,就这么个逻辑的。第一个方案,第二种方案呢? 好,我们在啊,对时先执行查第一步,先查询第二步再更新,再替换嘛。第三步,最后更新后更新。这个怎么理解?看这边 ctrl cctrl v 以下。 好,这个一个二字来看他的操作,不是这么去操作了,而是先第一件事情,从我们的数据库中先把数据给查询出来,所以先用到十来八 id, 把一加进去,先 查出我们这个员工数据。第二件事情,你要改动些什么?那你就在这里面做一些屁话,这也就是我们刚刚说的先查询第二件事情在做屁话, 带屁话,你说你要想要改哪些数据,哪些属性,你在这里面改,改完了之后最后一个逻辑就是更新这么一个逻辑啊,这时候你再来看一下数据会不会发生变化。 好,你的不需要看设,不需要看我们后端的数据库数据,只需要看哪个,看打印出来一个适合语句就行了。第一件事情,先把所有数据查询出来, id 查出所有数据,然后呢,把你 你想要替换的数据给改一下,那替换的数据这里面这么多数据,你想替换哪一个啊?你替换谁?比如说我想把名字替换了, at 换的数据就全部有了。 好,这个为什么可以做到?因为第一次查所有数据库里面所有数据原封不动拿出来,然后当我替换完了之后,新数据有了,最后再啊,对,原先没替换的数据也是原样的添加到叫更新到你的 数据中,所以呢,你会发现他数据其实并没有丢失,你看原先什么数据啊?对,进去的时候也是什么数据。 好,这种是第二种方案。那这种方案呢?不是很好,因为他需要做了一个动作,叫做茶操作。茶操作哈,好,这点注意一下。那在 看最后一个,也是做我们今天的一个重点讲解。这种方式使用叫啊对,这个语句。啊,对,看清楚啊,有个空。还有一个叫 red 这种方式, 这种呢可以理解的叫做局部更新的方式,局部自断 更新方式。那具体怎么个更新法?我们下一个视频再跟你说。这个就先说到这。

今天给大家分享一下几种向上插入的速度差异的一个对比啊。然后主要对比的话呢是这四种,一种是说啊买背的意思,所以是标签的这种形式,然后的话就是这么写的。然后呢 另外的这两种其实就是买 vcpos 提供的,如果不知道小伙伴可以去看前两期的一个视频。然后是 gbc 的一个批量插入,嗯, gbc 的一个批量插入的话是这么写的,比较普通啊。然后呢这个地方就是添加数据把它缩起来 好。然后呢我们这边采用的是呃跑十次去进行一个测试啊,嗯,这个测试的话,我们只是会记录他的一个批量插入的一个执行时间,这个 ctrl 其实就是我们啊提交过来的一个配量插入的这个方法。然后呢这个是我们 构建数据啊,构建数据的话这边数据都比较短,不是很长的那种数据,一共三十个字段。然后呢我们去进行一个十次的一个插入,然后去算他的最大值,最小值和平均值啊这样的操作。 然后我们最终的一个呈现没有说去通过一个测试类吧,因为测试类的话可能会涉及到一些啊蓝加载或者输入化问题,导致他测试出来的一个 数据不是很稳定。然后我们这边就是通过这个接口的形式我们去调用,然后去拿到他的结果啊,这边为了节省时间的话,其实呃都给大家提前跑出来了啊, 然后把这个数据都已经拉出来了。 ok, 我们这边可以看到啊。嗯,首先是六千条数据,然后做了一个五百条数据的一个插入,然后六千条数据这边的一个速度给大家做一个排序啊,平均直续做了一个排序啊,这地方为什么是六千 调呢?因为啊,默认的一个最大提交是四兆,哎,懒得去调这个大小了,所以说最大的话是六千啊,然后再大的话你就要去调他的相关参数啊,然后呢,我这边的话可以看到 jbc 的一个速度是最快的,对吧?针对六千条,然后是这,这样啊,这样啊,就是 yous 后面跟很多的数据这种方式, 然后呢,但是五五百条数据的时候,就会出现一个很有意思现象,你们发现其实是这种 yos 后面跟很多数据的这两种的速度比较快啊,差异并不大。那这个地方其实 为什么会这个样子啊?其实是因为我们这个标签啊,他在解析的时候,在解析这些数据的时候啊,他是会有一个性能的折损,但是这个性能的下降呢,他并不是一个线性的,而是会下降的比较急剧。所以说会出现这样的一个问题啊,希望这些数据在 呃大家以后做相关业务的时候能提供一个参考啊,但是呢,每个人电脑跑出来的数据可能都不太一样,好吧,今天的分享就到这里,我们下期再见。

请讲述一下 mates 的执行流程,那 mates 作为数据库的一个操作工具,那现在它的使用率是非常高的,那这个面试题它出现的频率也是非常高的。那首先我们来看 mates configer 这个核心配置文件 啊,在这个配置配置文件中呢,有两部分是非常重要的,第一个呢就是对数据库的一个配置,那第二部分呢,就是这个 mappers, 那这个 mappers 呢,它主要的就是关联的就是每个表的 circle 所对应的这个 map or 点叉 mar 的一个文件。 那接下来我们来看一下这个啊, metr 插麦文件的啊,一个具体的一个内容,那比如说这里有一个查询的一个配置,那在这个配置中呢?哎,它有这两部分,第一个呢就是 readout type, 它指定你这个 circle 啊,啊, circle 执行完之后一个出餐的一个数据类型, 还有这个啊,你这个色扣中的一个参数的这个入餐的啊数据类型啊,比如说在这里我们 vr 条件后面啊,我们就要给他设置这个入餐啊,在这里呢我们指定一个站位符。 那接下来我们就来看一下这个啊, my betas 它的一个执行流程。那首先我们来看这张图, 第一部分呢,他要去加载这个 my bates configure 这个配置文件,它主要呢就是加载哎你的运行环境,因为你要连接数据库吗?还有就是加载你的啊,表中对应的这个 mapper 这个印设文件。那第二部分呢,它就会构建一个绘画工厂 secret session factory, 那他呢是以全局只会有一个,他的主要作用呢就是他要创建这个 circle session, 那接着呢他就开始创建一个与数据库连接的绘画,就把我们叫他 circle session, 那 他就是与数据库的一个连接,绘画他包含了执行 c 口语句的所有方法,每次操作数据库呢都会构建一个绘画,那他可以有多个,那接着呢,他开始调用这个 c 口的一个执行器, 他是真正执行啊数据库操作的一个接口,当然他也负责这个查询缓存的一个维护,那我们知道买媒配置,他支持一级缓存和二级缓存,那也都由他来进行管理,那接下来他就开始去调用这个 mypends states statement mot 的一个对象,那这个, 那这个对象呢?是非常核心的,那它主要作用呢?就是他要去解析啊,你的这个 circle 所对应的这个表,所对应的这个 mapper 的一个文件,那他会对这个 mapper 文件中的一个啊,入餐的一个餐 单数的一个解析,还有对对我们数据库返回结果的一个输出。比如说在这里,哎,他 解析完这个售后之后啊,他要去调这个数据库,当我们数据库把数据啊查出来之后返回给他,然后他要把这个数据类型啊经经过一个啊一个转换,因为他要把这个数据类型转换成这个 gaver 的数,那个数据类型进行一个输出。 那接下来我们再详细看一下这个 mapper statement 对象,哎,他主要是干什么呢啊?比如说我们这里,哎,有一个折扣, 有一个啊,有一个 mapper 点 charmair 文, charmair 文件啊中的一个折扣啊,这个时候呢,哎,他要去啊解析这个文件,在这里我们会看到,哎,他在这里去读取这个文件之后,他开始把这个折扣 啊给这个折扣对应的 id, 哎,这样的话他就给对应了出来,哎,然后呢?哎,他就拿到这个配置之后,他就可以把这里面的这个折扣给读出,读取出来,然后他把这个啊,把这个这一部分就转化成了这个问号 这个站位符,然后呢?哎,在这里我们可以看到它有一个 primate mapins 啊,在这里呢他把我们的入餐啊就构建成了一个 release 的一个数据结构, 这个时候呢他就通过顺序去往这个问号站位服中的啊去填充啊,在这里呢,就是,哎,我们刚说的非常重要的一个部分,就是他要对这个输入参数啊进行一个转换,因为,哎我们 啊 pyram type 对应的是一个家务类型的一个啊,数据类型的一个参数,他要把把它转成这个 啊,我们数据库所对应的这个,哎数据类型啊,接着我往下看,哎,接着,哎,他操作完数据库之后之后,那数据库会给他返回一个结果,对吧?就叫做 realt max 啊,接下来他要把这个结果他还要进行一个转换, 因为你是数据库的返回的一个结果,他要把它转换成哎,我们加二的一个数据类型,然后才输出给我们。