吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 442|回复: 2
收起左侧

[讨论] spring-mybatis批量操作数据库连接问题

[复制链接]
goodkai 发表于 2023-3-20 13:16
1.spring默认的事务隔离级别下,for循环批量操作数据,是会开启一个数据库连接还是多个?
2.for循环形式和mybtais批量操作消耗的时间点有哪些?

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

sunyx816 发表于 2023-3-20 15:44
在Spring默认的事务隔离级别下,即READ_COMMITTED,通常情况下在一个事务中执行for循环批量操作数据会开启一个数据库连接。这是因为在Spring事务机制中,默认情况下使用的是单一数据库连接的模式,即所有的操作都在同一个连接上进行,以确保事务的一致性。

此时每次迭代循环执行的SQL语句都会在同一个连接中执行,因此对于批量操作,可以更加有效地利用连接池资源,提高数据库操作效率。

但是,如果在循环过程中开启了新的事务或者采用了不同的事务隔离级别,那么每次迭代循环都会开启一个新的数据库连接。因此,在设计数据操作方案时,应该注意事务的隔离级别,以及是否需要在循环过程中开启新的事务。
sunyx816 发表于 2023-3-20 15:45
在for循环形式下,一般来说,每次迭代都会执行一次SQL语句操作数据库。因此,时间点可以分为以下几种情况:

执行for循环之前:此时还没有执行任何的SQL语句,消耗的时间仅仅是for循环的迭代次数以及循环中其他逻辑代码的时间。
执行单个SQL语句时:每次迭代循环中,执行SQL语句通常是耗时最长的时间点,因为需要建立数据库连接、执行SQL语句、处理结果等操作。
执行完所有SQL语句后:for循环结束后,所有的SQL语句都已经执行完成,此时的耗时也包括了所有SQL语句的执行时间以及for循环迭代次数和其他逻辑代码的时间。
在使用MyBatis进行批量操作时,一般可以通过foreach标签实现。此时,时间点可以分为以下几种情况:

执行批量操作语句之前:此时还没有执行任何的SQL语句,消耗的时间仅仅是数据的获取时间及其他逻辑代码的时间。
执行批量操作语句时:MyBatis一般会将多个 SQL 语句集中在一起发送给数据库,通过批量执行来提高执行效率,此时的耗时主要包括建立连接、发送数据、处理结果等操作。
执行完所有批量操作语句后:所有SQL语句都已经执行完成,此时的耗时也包括了所有SQL语句的执行时间以及数据的写入时间、MyBatis执行批量操作的时间和其他代码逻辑的时间。
需要注意的是,在使用MyBatis进行批量操作时,需要设置配置参数batch,以确定每个批次的大小。不同的批次大小会对执行效率产生影响。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止回复与主题无关非技术内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-10 07:42

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表