石家庄网站建设策划方案,青羊区建设网站,中山营销网站建设联系方式,建设银行滇龙行网站前言
基于mybatis实现的批量插入和更新 由于直接执行批量所有数据可能会出现长度超出报错问题#xff0c;使用如下方式即可解决
实现
原理还是分配执行#xff0c;这里的100就是设定每次执行最大数 /*** 封装使用批量添加或修改数据库操作* * param list 集合* param inse…前言
基于mybatis实现的批量插入和更新 由于直接执行批量所有数据可能会出现长度超出报错问题使用如下方式即可解决
实现
原理还是分配执行这里的100就是设定每次执行最大数 /*** 封装使用批量添加或修改数据库操作* * param list 集合* param insertFunc 需要执行的任务 (Consumer lambda表达式方法引用的任务目标)* param T 自定义类型*/public static T void insertBatch(ListT list, ConsumerListT consumer, boolean asyn) {int max 100; // 每次批量限制数if (list.size() max) {ListListT allList new ArrayList();ListT tempList new ArrayList();for (int i 0; i list.size(); i) {tempList.add(list.get(i));if ((i % max) 0) {allList.add(tempList);tempList new ArrayList();}}if (tempList.size() 0) {allList.add(tempList);}if(asyn) {// 多线程遍历异步-这里直接遍历无需accept接口式方法简化allList.parallelStream().forEach(consumer);}else {// 遍历同步-这里直接遍历无需accept接口式方法简化allList.forEach(consumer);}} else {// 执行泛型集合数据consumer.accept(list);}}使用
xml
这里使用插入作为例子也可以使用批量更新 insert idinsertBatchUserinsert into sys_user(name,sex)values foreach collectionlist itemitem indexindex separator,(#{item.name}, #{item.sex})/foreach/insert更新的写法 update idupdateBatchUserforeach collectionlist itemitem indexindex separator;update sys_usersetif testitem.name ! null and item.name ! name #{item.name},/ifupdate_date #{item.updateDate}whereid #{item.id}/where/set/foreach/update批量数据 ListUserBean list new ArrayList();UserBean user1 new UserBean();user1.setName(张三);user1.setSex(男);UserBean user2 new UserBean();user2.setName(李四);user2.setSex(男);list.add(user1);list.add(user2);调用 // 执行批量插入或修改ConsumerListUserBean consumer v - dao.insertBatchUser(v);insertBatch(list, consumer, true)