【业务功能篇52】Springboot+mybatis mysql开启批量执行sql参数 allowMultiQueries=true

这篇具有很好参考价值的文章主要介绍了【业务功能篇52】Springboot+mybatis mysql开启批量执行sql参数 allowMultiQueries=true。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

allowMultiQueries=true参数的作用:

  1. 可以在sql语句后携带分号,实现多语句执行。
  2. 可以执行批处理,同时发出多个SQL语句。

在application-xxx.xml配置文件中,配置数据库的信息

spring:
  datasource:
    dynamic:
      primary: mysqldb # 默认数据源
      datasource: 
        mysqldb:
          driverClassName: org.mariadb.jdbc.Driver
          url: jdbc:mysql://localhost:3306/data_dev?useUnicode=yes&characterEncoding=UTF-8&useAffectedRows=true&allowMultiQueries=true&autoReconnect=true&failOverReadOnly=false

 实例 dao层xml:

  • 逐条更新,但一次提交给MySQL服务器而已。
  • 利用foreach 遍历循环,传入的list集合数据,批量的进行update
<update id="updateStudentBatch" parameterType="java.util.List">
    <foreach collection="list" item="item" index="index">
        UPDATE mutest.student
        <set>
            <if test="item.name != null">
                name=#{item.name},
            </if>
            <if test="item.age != null">
                age=#{item.age}
            </if>
        </set>
        WHERE
        id=#{item.id};
    </foreach>
</update>

 

批处理 rewriteBatchedStatements=true 关于rewriteBatchedStatements这个参数:当前项目中未使用过

  • MySQL的JDBC连接的url中要加rewriteBatchedStatements参数,并保证5.1.13以上版本的驱动,才能实现高性能的批量插入。
  • MySQL JDBC驱动在默认情况下会无视executeBatch()语句,把我们期望批量执行的一组sql语句拆散,一条一条地发给MySQL数据库,批量插入实际上是单条插入,直接造成较低的性能。
  • 只有把rewriteBatchedStatements参数置为true, 驱动才会帮你批量执行SQL
  • 另外这个选项对INSERT/UPDATE/DELETE都有效
  • 添加rewriteBatchedStatements=true这个参数后的执行速度比较:
  • 同个表插入一万条数据时间近似值:
  • JDBC BATCH 1.1秒左右 > Mybatis BATCH 2.2秒左右 > 拼接SQL 4.5秒左右
  • demo:
  • master.jdbc.url=jdbc:mysql://112.126.84.3:3306/outreach_platform?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&rewriteBatchedStatements=true

ps:mysql的话只要在url后面加上&rewriteBatchedStatements=true即可,但是sqlServer则需要以分号分隔;rewriteBatchedStatements=true 文章来源地址https://www.toymoban.com/news/detail-609248.html

到了这里,关于【业务功能篇52】Springboot+mybatis mysql开启批量执行sql参数 allowMultiQueries=true的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【业务功能篇45】SSM整合shiro项目:web.xml执行顺序

    web.xml 的加载顺序是:ServletContext - context-param - listener - filter - servlet 学习shiro时,需要配置shiro ,我们需要在filter过滤器之前,先初始化好shiro组件,不然请求认证无法走到shiro,根据web.xml的加载顺序,listener标签中会先于filter标签中的组件,所以我们配置shiro的context文件,单独

    2024年02月16日
    浏览(44)
  • SpringBoot+MyBatis批量插入数据的三种方式

    最近导入表格数据时需要同时插入修改大量数据,研究了一下有三种实现方式 1、用for循环调用sql插入数据 这种方式插入大量数据时,效率非常底下,不推荐 2、利用mybatis的foreach来实现循环插入 这种方式插入大量数据时,好处是不用频繁访问数据库,一条sql搞定,效率比较

    2024年02月16日
    浏览(29)
  • Java8 实现批量插入和更新,SpringBoot实现批量插入和更新,Mybatis实现批量插入和更新

    基于mybatis实现的批量插入和更新 由于直接执行批量所有数据可能会出现长度超出报错问题,使用如下方式即可解决 原理还是分配执行,这里的100就是设定每次执行最大数 这里使用插入作为例子,也可以使用批量更新 更新的写法

    2024年02月12日
    浏览(38)
  • transaction 事务 开启 关闭 不使用 手动控制 spring springboot mybatis

    spring springboot mybatis 事务配置 Transactional的Propagation 开启事务 关闭事务_globalcoding 单元测试时,发现默认是使用事务。想要关闭事务,使用: 做单元测试的时候,发现默认是使用事务的。代码和日志如下: 日志: 通过日志发现,默认用了事务transaction,这会有一个现象,就是

    2024年02月03日
    浏览(31)
  • 【业务功能篇104】 补充【业务功能篇99】微服务-springcloud-springboot-电商订单模块--整合支付

    在前面我们业务功能篇98-99中,我们介绍了电商项目中的订单模块服务,那么最后就是需要进行支付动作,那么我们这里就通过订阅第三方平台支付宝的支付调用接口功能,来进一步完成订单提交后的支付动作,支付宝的接口使用可以登录官网开发指南详情去了解 在我们对应

    2024年02月09日
    浏览(40)
  • 【业务功能篇53】Springboot 数据封装对象

    1) Entity:实体 ,与数据库的每一行数据打交道的,它的属性对应数据库每个字段 对应数据库的id,name,birthday等等字段,在CRUD中都会频繁用到 2) VO(View Object):视图类对象 ,属性对应前端页面用到的变量,例如用户登录页面涉及账号和密码,通过VO的封装传到HTML页面 3)

    2024年02月15日
    浏览(32)
  • Springboot项目怎么设计业务操作日志功能?

      很久以前都想写这篇文章,一直没有空,但直到现在我对当时的情景还有印象,之所以有印象是因为需求很简单,业务操作日志的记录与查询的功能,但是具体实现真的很烂,具体的烂法会在反面示例里细说,领导以及客户层面很认可,一系列迷之操作,让我印象深刻。

    2023年04月16日
    浏览(62)
  • 【业务功能篇07】Mysql 模糊查询

    业务场景:我们对不同的业务逻辑进行数据处理时,多数是离不开需要模糊匹配的时候,比如要获取该表某个字段中,含有某个具体的字符内容,过滤出业务想要的数据。  这里介绍有这么几种:  通配符的分类 \\\"%\\\" 百分号通配符: 表示任何字符出现任意次数 (可以是0次)。

    2024年02月06日
    浏览(32)
  • MySQL8.0中Online DDL也要在业务低峰期执行

    一、背景 MySQL 从 5.6 开始引入了 Online DDL , alter 操作不再阻塞 dml 。在 MySQL 8.0 中,针对 Online DDL 做了进一步优化, alter table 加列操作支持 INSTANT 算法,意思就是使用这个算法进行加列操作只需要修改表的元数据信息,操作瞬间就完成了。在 MySQL 8.0.30 以后, instant 算法支持

    2023年04月25日
    浏览(35)
  • 【业务功能篇57】Springboot + Spring Security 权限管理 【上篇】

    4.1.1 权限管理的意义 后台管理系统中,通常需要控制不同的登录用户可以操作的内容。权限管理用于管理系统资源,分配用户菜单、资源权限,以及验证用户是否有访问资源权限。 4.1.2 RBAC权限设计模型 ACL介绍 ACL(Access Control List):访问控制列表 用户 - 权限 ACL 模型,权限

    2024年02月15日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包