# batchtest **Repository Path**: zhangmrit/batchtest ## Basic Information - **Project Name**: batchtest - **Description**: mybatis批量新增和更新的几种方案的测试 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2019-06-28 - **Last Updated**: 2022-05-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## 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 into test_user(user_name,remark) values (#{item.userName},#{item.remark}) ``` 批量更新推荐`case when then`,但要控制长度,分组处理,社会主义不能开倒车,jdbc就不推荐了,不过你大爷始终是你大爷 ``` update test_user when user_name = (#{item.userName}) then #{item.remark} where user_name in #{item.userName} ```