MyBatis批量新增和更新 mybatisbatch
程序员文章站
2022-05-29 17:04:58
...
网上参考了下总结:在连接SQL后面加上:&allowMultiQueries=true 才能实现批量更新
一、批量添加
1、XML
2、代码方法体
二 、更新
1、XML
2、方法体
一、批量添加
1、XML
<insert id="addBatchs" useGeneratedKeys="true" parameterType="java.util.List"> <selectKey resultType="long" keyProperty="id" order="AFTER"> SELECT LAST_INSERT_ID() AS ID </selectKey> INSERT INTO A (aa) VALUES <foreach collection="list" item="item" index="index" separator="," > (#{item.aa}) </foreach> </insert>
2、代码方法体
int result = 0; if (collections == null || collections.isEmpty()) { return result; } SqlSession batchSqlSession = null; try { // 获取批量方式的sqlsession batchSqlSession = getSqlSessionTemplate().getSqlSessionFactory().openSession(ExecutorType.BATCH, false); String insertSqlId = getStatement("addBatchs"); // 每批commit的个数 > 100 int startIndex = 0; int temps = 100; int size = collections.size(); int count = (size % temps == 0) ? (size / temps) : (size / temps) + 1; boolean tag = false; for (int i = 0; i < count; i++) { if (tag) { break; } if (temps > size) { temps = size; tag = true; } List<T> tempLists = collections.subList(startIndex, temps); batchSqlSession.insert(insertSqlId, tempLists); result += tempLists.size(); startIndex = temps; temps += 100; batchSqlSession.commit(); batchSqlSession.clearCache(); } } catch (Exception e) { batchSqlSession.rollback(); } finally { batchSqlSession.close(); } return result;
二 、更新
1、XML
<update id="updateBatchs" parameterType="java.util.List"> <foreach collection="list" item="item" index="index" open="" close="" separator=";"> UPDATE <include refid="table_name" /> <set> <if test="item.aa != null"><![CDATA[aa= #{item.aa},]]></if> </set> <![CDATA[WHERE id = #{item.id}]]> </foreach> </update>
2、方法体
int result = 0; if (collections == null || collections.isEmpty()) { return result; } SqlSession batchSqlSession = null; try { // 获取批量方式的sqlsession batchSqlSession = getSqlSessionTemplate().getSqlSessionFactory().openSession(ExecutorType.BATCH, false); String updateSqlId = getStatement("updateBatchs"); // 每批commit的个数 > 100 int startIndex = 0; int temps = IConstant.BATH_QUERY_SIZE; int size = collections.size(); int count = (size % temps == 0) ? (size / temps) : (size / temps) + 1; boolean tag = false; for (int i = 0; i < count; i++) { if (tag) { break; } if (temps > size) { temps = size; tag = true; } List<T> tempLists = collections.subList(startIndex, temps); batchSqlSession.update(updateSqlId, tempLists); result += tempLists.size(); startIndex = temps; temps += 100; batchSqlSession.commit(); batchSqlSession.clearCache(); } } catch (Exception e) { e.printStackTrace(); result = 0; batchSqlSession.rollback(); } finally { batchSqlSession.close(); } return result;
推荐阅读
-
深度操作系统deepin 20更新:新增备份还原、深度下载器和浏览器
-
追上AMD/NV!Intel显卡控制中心更新:新增游戏录制和直播功能
-
Mybatis generator生成Service,Controller,添加批量新增数据接口(基于mybatis-generator-1.3.5源码修改)
-
Mybatis 批量更新实体对象方式
-
.Net中DataAdapter批量插入和更新数据总结
-
解决mybatis批量更新出现SQL报错问题
-
解决mybatis批量更新出现SQL报错问题
-
mybatis批量修改,批量新增
-
MyBatis-spring和spring JDBC批量插入Mysql的效率比较
-
myBatis批量添加,修改和删除 mybatis批量添加修改删除