==================================================================

分别展示 mybatis 批量新增  和 批量更新   的操作:

controller层:

goodsService.batchInsert(insertGoodsList);

goodsService.batchUpdate(updateGoodsList);

service层:

切割List的方法【https://www.cnblogs.com/sxdcgaq8080/p/9376947.html】【建议分批次处理,每次处理1000条】【实际根据每条数据的大小,自行划分】

  @Override
@Transactional
public int batchInsert(List<Goods> list) {
int a = 0; List<List<Goods>> goodsAllList = ListUtils.splitListBycapacity(list,1000);
for (List<Goods> goodsList : goodsAllList) {
a += mapper.batchInsert(goodsList);
} return a;
} @Override
@Transactional
public int batchUpdate(List<Goods> list) {
int a = 0; List<List<Goods>> goodsAllList = ListUtils.splitListBycapacity(list,1000);
Map<String,Object> map = new HashMap<>();
for (List<Goods> goodsList : goodsAllList) {
map.put("list",goodsList);
a += mapper.batchUpdate(map);
} return a;
}

Mapper.java层

    int batchInsert(List<Goods> list);

    int batchUpdate(Map<String,Object> map);

Mapper.xml层

【注意,batchUpdate的原理,是循环拼接sql,一次连接数据库,执行多条update语句】

<insert id="batchInsert">
INSERT INTO goods (create_date,update_date,create_id,update_id,enabled,
tenement_id,uid,name,py_all,py_head,
outer_id,outer_code,mnemonic_code,del_flag,enabled_flag,
goods_type_uid,url,bar_cide,sale_price,integral,
scan_name,brand_uid,en_name) VALUES <foreach collection="list" item="item" separator=",">
(#{item.createDate},#{item.updateDate},#{item.createId},#{item.updateId},#{item.enabled},
#{item.tenementId},#{item.uid},#{item.name},#{item.pyAll},#{item.pyHead},
#{item.outerId},#{item.outerCode},#{item.mnemonicCode},#{item.delFlag},#{item.enabledFlag},
#{item.goodsTypeUid},#{item.url},#{item.barCide},#{item.salePrice},#{item.integral},
#{item.scanName},#{item.brandUid},#{item.enName})
</foreach>
</insert> <update id="batchUpdate" parameterType="java.util.Map">
<foreach collection="list" separator=";" item="goods">
update
goods
SET
update_date = #{goods.updateDate},
update_id = #{goods.updateId},
enabled = #{goods.enabled},
name = #{goods.name},
py_all = #{goods.pyAll},
py_head = #{goods.pyHead},
outer_code = #{goods.outerCode},
mnemonic_code = #{goods.mnemonicCode},
del_flag = #{goods.delFlag},
enabled_flag = #{goods.enabledFlag},
goods_type_uid = #{goods.goodsTypeUid},
url = #{goods.url},
bar_cide = #{goods.barCide},
sale_price = #{goods.salePrice},
integral = #{goods.integral},
scan_name = #{goods.scanName},
brand_uid = #{goods.brandUid},
en_name = #{goods.enName}
where
outer_id = #{goods.outerId}
and
tenement_id = #{goods.tenementId} </foreach>
</update>

最后如果,批量插入可以成功,但是批量更新失败,可以参考:https://www.cnblogs.com/sxdcgaq8080/p/10565023.html

最后需要注意的是,如果解决了批量更新问题后,还想按照【https://www.cnblogs.com/sxdcgaq8080/p/9100178.html】打印sql,就失效了,sql就不会打印出来了。!!!!

===========================================================================

【mybatis】mybatis中批量插入 批量更新 batch 进行insert 和 update,或者切割LIst进行批量操作的更多相关文章

  1. mybatis中批量插入以及更新

    1:批量插入 批量插入就是在预编译的时候,将代码进行拼接,然后在数据库执行 <insert id="batchInsert" parameterType="java ...

  2. mybatis 注解的方式批量插入,更新数据

    一,当向数据表中插入一条数据时,一般先检查该数据是否已经存在,如果存在更新,不存在则新增  使用关键字  ON DUPLICATE KEY UPDATE zk_device_id为主键 model  ...

  3. Oracle+Mybatis批量插入,更新和删除

    1.插入 (1)第一种方式:利用<foreach>标签,将入参的list集合通过UNION ALL生成虚拟数据,从而实现批量插入(验证过) <insert id="inse ...

  4. java批量插入或更新的问题

    在批量插入或者更新中,setXXX的时候字段类型必须一致.例如:在普通sql中 pstmt8.setBigDecimal(j ,xxx);可以写成pstmt8.setString(j,xxx.toSt ...

  5. C#使用SqlDataAdapter 实现数据的批量插入和更新

    近日由于项目要求在需要实现中型数据的批量插入和更新,晚上无聊,在网上看到看到这样的一个实现方法,特摘抄过来,以便以后可能用到参考. 一.数据的插入 DateTime begin = DateTime. ...

  6. MySQL on duplicate key update 批量插入并更新已存在数据

    业务上经常存在一种现象,需要批量往表中插入多条数据,但在执行过程中,很可能因为唯一键冲突,而导致批量插入失败.因此需要事先判断哪些数据是重复的,哪些是新增的.比较常用的处理方法就是找出已存在的数据,并 ...

  7. Python中elasticsearch插入和更新数据的实现方法

    Python中elasticsearch插入和更新数据的实现方法 这篇文章主要介绍了Python中elasticsearch插入和更新数据的实现方法,需要的朋友可以参考下 首先,我的索引结构是酱紫的. ...

  8. PHP5: mysqli 插入, 查询, 更新和删除 Insert Update Delete Using mysqli (CRUD)

    原文: PHP5: mysqli 插入, 查询, 更新和删除  Insert Update Delete Using mysqli (CRUD) PHP 5 及以上版本建议使用以下方式连接 MySQL ...

  9. Mybatis中实现oracle的批量插入、更新

    oracle 实现在Mybatis中批量插入,下面测试可以使用,在批量插入中不能使用insert 标签,只能使用select标签进行批量插入,否则会提示错误 ### Cause: java.sql.S ...

随机推荐

  1. c++ 引用的分析

    在一般教材里面,我们会说引用是变量的别名,另外在 c++ primer 5里面说到引用的时候,说引用不是对象,不能对它进行取地址.但是我们来看看下面代码的分析: #include <iostre ...

  2. 【玲珑杯Round17】xjb总结

    zcy真是垃圾,啥都不会的那种. 菜的不行. 这场手速上了三题,然后各种E被卡…… 日个吗居然E不开栈,傻逼吧 有毒吧 来看题: A.sqc给的我的神奇公式,gtmd居然能A? #include< ...

  3. 相册框架之AssetsLibrary

    看到项目中用到AssetsLibrary这个框架, 所以研究了一下 其实很简单 - (void)getAlbumPhoto { NSString *tipTextWhenNoPhotosAuthori ...

  4. Canvas 高级

    一.Canvas 高级 1.变换--位移 translate(x, y) 2.变换-缩放 scale(xS, yS) 3.变换-旋转 rotate(弧度) 4.环境的保存和释放 save() rest ...

  5. [How to] UIScrollView的使用方法

    1.简介 代码 延续前一个博客使用Xib来创建view,本文我们创建一个带有PageControlView的ScrollView的table的headView,如下图: 具有自动滚动: 具有拖拽完毕后 ...

  6. PCA和SVD

    一.PCA(Principal Component Analysis) 主成分分析,数据从原来的坐标系转换到新的坐标系,只保留新坐标系中的前面几个坐标轴,即对数据进行了降维处理 1.算法描述 (1)第 ...

  7. django自带的django.core.mail模块实现发邮件的功能

    django自带了一个模块,可以实现发邮件的功能.如果项目开发遇到需要发邮件进行验证的时候可以用到. 1.先要准备发件人 发邮件需要使用SMTP.SMTP是什么呢? 简单邮件传输协议(Simple M ...

  8. [PAT] 1144 The Missing Number(20 分)

    1144 The Missing Number(20 分) Given N integers, you are supposed to find the smallest positive integ ...

  9. 深入理解python多进程编程

    1.python多进程编程背景 python中的多进程最大的好处就是充分利用多核cpu的资源,不像python中的多线程,受制于GIL的限制,从而只能进行cpu分配,在python的多进程中,适合于所 ...

  10. python资源合集

    Python 官网: https://www.python.org/ Python2.7 doc: https://docs.python.org/2/ Python Package User Gui ...