1 Star 1 Fork 1

wind/batchtest

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

关于批量新增和更新的一些方案的测试

测试环境

mysql 5.7

系统 windows 内存16g

bathc是mybatis自带的一种方式,操作简单,整合spring后并不常用,需配置rewriteBatchedStatements=true

循环values是在xml中foreach标签来拼接values,比较方便,通用mapper也集成了该方案(主键必须自增)

jdbc是老牌工具了,功能齐全

循环update是在xml种foreach标签来拼接sql,用;隔开,需配置allowMultiQueries=true

case when then 其中when...then...是sql中的"switch" 语法

数量 mybatis BATCH 循环values新增 jdbc实现批量新增 mybatis BATCH更新 循环update(;隔开)更新 case when 更新 jdbc实现批量更新
50 56ms 58ms 49ms 1947ms 1874ms 432ms 393ms
500 359ms 90ms 142ms 14292ms 14963ms 447ms 302ms
5w 28256ms 1059ms 6319ms - - 字符超长 9558ms
10w - 3137ms 12812ms - - 字符超长 17570ms

批量新增推荐

	<insert id="batchInsertList">
		insert into test_user(user_name,remark)
		values
		<foreach collection="userList" index="index" item="item"
			separator=",">
			(#{item.userName},#{item.remark})
		</foreach>
	</insert>

批量更新推荐case when then,但要控制长度,分组处理,社会主义不能开倒车,jdbc就不推荐了,不过你大爷始终是你大爷

	<update id="batchUpdateList">
		update test_user
		<trim prefix="set" suffixOverrides=",">

      		<trim prefix="remark =case" suffix="end,">
        		<foreach item="item" collection="userList">
          			when user_name = (#{item.userName})
          			then #{item.remark}
        		</foreach>
      		</trim>

    	</trim>
    	where user_name in
    	<foreach item="item" collection="userList" separator="," open="(" close=")">
      		#{item.userName}
    	</foreach>
	</update> 

空文件

简介

mybatis批量新增和更新的几种方案的测试 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/zhangmrit/batchtest.git
git@gitee.com:zhangmrit/batchtest.git
zhangmrit
batchtest
batchtest
master

搜索帮助