目录

  • 一、通过foreach标签
  • 二、通过Mybatis的ExecutorType.BATCH方式

有两种方式可以实现mybatis的批量提交,第一种便是foreach标签,第二种便是开始mybatis的批量模式。

一、通过foreach标签

foreach标签即是通过迭代传入的集合或者数组,进行拼接sql。

标签包含以下属性:

​ item:表示集合中每一个元素进行迭代时的别名

​ index:表示每次迭代到的位置

​ open:表示该语句以什么开始

​ separator:表示在每次进行迭代之间以什么符号作为分隔符

​ close:表示以什么结束

​ collection:表示要迭代的对象,可以是集合则属性值为list,也可以是数组则属性值为array

示例:

<insert id="batchInsert" parameterType="java.util.List">insert into person (id, `name`, age, phone, address, created_time, updated_time)values<foreach collection="list" item="item" index="index" separator=",">(#{item.id,jdbcType=BIGINT},#{item.name,jdbcType=VARCHAR},#{item.age,jdbcType=TINYINT},#{item.phone,jdbcType=VARCHAR},#{item.address,jdbcType=VARCHAR},#{item.createdTime,jdbcType=BIGINT},#{item.updatedTime,jdbcType=BIGINT})</foreach>
</insert>

实际生成的sql是这样的:

insert into person ( id, `name`, age, phone, address, created_time, updated_time ) values ( ?, ?, ?, ?, ?, ?, ? ) , ( ?, ?, ?, ?, ?, ?, ? )

二、通过Mybatis的ExecutorType.BATCH方式

Mybatis内置的ExecutorType有3种,默认的是simple,该模式下它为每个语句的执行创建一个新的预处理语句,单条提交sql;而batch模式重复使用已经预处理的语句,并且批量执行所有更新语句,显然batch性能将更优;

批量提交只能应用于 insert, update, delete
这时我们手动控制事务。

示例:

@Autowired
private SqlSessionTemplate sqlSessionTemplate;public void exeBatch() {//新获取一个模式为BATCH,自动提交为false的sessionSqlSession sqlSession = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false);PersonModelMapper mapper = sqlSession.getMapper(PersonModelMapper.class);try {for (int i = 0; i < 10; i++) {//或者使用//sqlSession.insert("com.example.demo.db.dao.PersonModelMapper.insertSelective", new PersonModel());//主意这时候不能正确返回影响条数了mapper.insertSelective(new PersonModel());}sqlSession.commit();//清理缓存,防止溢出//sqlSession.clearCache();} catch (Exception e) {//异常回滚sqlSession.rollback();} finally {sqlSession.close();}
}

Mybatis批量提交相关推荐

  1. mybatis 批量提交清除缓存_重学Mybatis(三)-------缓存 (含面试题)

    博主将会针对Java面试题写一组文章,包括J2ee,SQL,主流Web框架,中间件等面试过程中面试官经常问的问题,欢迎大家关注.一起学习,一起成长,文章底部有面试题. mybatis的一级缓存 myb ...

  2. java list分批_Java实用笔记——mybatis批量导入

    1.使用Statement 批量插入 public void batchInsertJdbc1() throws Exception {DataSource ds = (DataSource) Spr ...

  3. Mybatis批量插入数据到Oracel

    最近项目中出现了一个功能存在性能问题,经过研究发现主要是出现在数据插入的时候,当时用的单条提交,发现性能极其差,因为项目中用的mybatis,所以考虑用批量提交的方式. <!-- 批量提交 -- ...

  4. mybatis批量新增和批量更新的效率对比

    今天,为了更多了解下,mybatis批量新增和批量更新在simple/batch模式 + MySQL的rewriteBatchedStatements下效率有什么区别,做了一次实验. 实验结果,让人意 ...

  5. MyBatis批量插入(sqlserver BULK INSERT)

    MyBatis批量插入: 1. foreach方式 2.sqlsession + sqlsession.flushStatements方式: //        SqlSession sqlSessi ...

  6. MyBatis批量插入的五种方式

    MyBatis利用For循环批量插入 MyBatis的手动批量提交 MyBatis以集合方式批量新增(推荐) MyBatis-Plus提供的SaveBatch方法 MyBatis-Plus提供的Ins ...

  7. MyBatis - 批量插入

    由于MyBatis的本质是对JDBC的封装,所以从JDBC的原生来看此问题~ 一.原生JDBC插入两种方式 conn.setAutoCommit(false); //设置手动提交 //预编译sql对象 ...

  8. Mybatis 批量插入事物问题

    一.首先对于批量数据的插入有两种解决方案(下面内容只讨论和Mysql交互的情况) 1)for循环调用Dao中的单条插入方法 2)传一个List<Object>参数,使用Mybatis的批量 ...

  9. mysql数据没有真正提交,转MySQL 批量提交优化

    用户修改布局时,需要批量更新mysql的xxxx_layout_xxxx表.批量操作的数据量是2-30条/次.批量操作是这次项目在技术上比较关键的一个点,之前批量操作做过性能上的测试,mysql端问题 ...

最新文章

  1. 视觉惯性SLAM: VI ORB-SLAM
  2. jsp 内置对象 session
  3. CSS3 keyframes动画实现弹跳效果
  4. 机器学习知识点(二)各类型平均数Java实现
  5. append有时加载不出来_关于艾拉浏览器看漫画,有时加载慢的解决方法,你知道了吗...
  6. JAXB –表示空集合和空集合
  7. YUV格式转换RGB(基于opencv)
  8. 双击程序后系统弹框“您无权访问此程序”的解决办法
  9. iphone录屏没内部声音_6个iPhone隐藏功能,让你的手机好用到飞起
  10. Sicily 1029. Rabbit 解题报告
  11. 保持头脑清醒的窍门2/13
  12. scrt上传下载文件
  13. 智能计算系统1 环境搭建
  14. 使用canvas 画钟表
  15. oracle的同义词删不掉,oracle 删除同义词
  16. #199-【莫队】小Z的袜子
  17. 喜欢的歌,老歌居多,呵呵,怀旧,改不了的毛病
  18. CameraLink备忘录
  19. 一个人的朝圣深度感悟_朝圣之末找到更强大的WordWrap函数
  20. php curl如何确定数据格式正确,PHP CURL没有正确处理编码的返回数据

热门文章

  1. 河南科技大学计算机为什么一本二本都招生,河南科技大学是一本还是二本?什么水平?附河南科技大学录取分数线...
  2. 关于进程的终止和暂停
  3. 莱特昂-布兰朵的诗-《不正常人类症候群》
  4. upload-labs通关学习笔记
  5. LODOP中无规律无法还原偶尔出现问题排查
  6. IEEE EMC 办电磁产学研讨
  7. 给定一个链表,一次颠倒链表k的节点并返回其修改列表。如果节点的数量不是k的倍数,那末最后的剩余节点应该保持原样。
  8. matlab 图像 获取坐标,matlab – 获取图像内矢量的所有像素坐标
  9. 为什么网页设计要使用栅格化
  10. 举个栗子!Tableau 技巧(163):实现 年累计增长率 分析