Mybatis批量提交
目录
- 一、通过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批量提交相关推荐
- mybatis 批量提交清除缓存_重学Mybatis(三)-------缓存 (含面试题)
博主将会针对Java面试题写一组文章,包括J2ee,SQL,主流Web框架,中间件等面试过程中面试官经常问的问题,欢迎大家关注.一起学习,一起成长,文章底部有面试题. mybatis的一级缓存 myb ...
- java list分批_Java实用笔记——mybatis批量导入
1.使用Statement 批量插入 public void batchInsertJdbc1() throws Exception {DataSource ds = (DataSource) Spr ...
- Mybatis批量插入数据到Oracel
最近项目中出现了一个功能存在性能问题,经过研究发现主要是出现在数据插入的时候,当时用的单条提交,发现性能极其差,因为项目中用的mybatis,所以考虑用批量提交的方式. <!-- 批量提交 -- ...
- mybatis批量新增和批量更新的效率对比
今天,为了更多了解下,mybatis批量新增和批量更新在simple/batch模式 + MySQL的rewriteBatchedStatements下效率有什么区别,做了一次实验. 实验结果,让人意 ...
- MyBatis批量插入(sqlserver BULK INSERT)
MyBatis批量插入: 1. foreach方式 2.sqlsession + sqlsession.flushStatements方式: // SqlSession sqlSessi ...
- MyBatis批量插入的五种方式
MyBatis利用For循环批量插入 MyBatis的手动批量提交 MyBatis以集合方式批量新增(推荐) MyBatis-Plus提供的SaveBatch方法 MyBatis-Plus提供的Ins ...
- MyBatis - 批量插入
由于MyBatis的本质是对JDBC的封装,所以从JDBC的原生来看此问题~ 一.原生JDBC插入两种方式 conn.setAutoCommit(false); //设置手动提交 //预编译sql对象 ...
- Mybatis 批量插入事物问题
一.首先对于批量数据的插入有两种解决方案(下面内容只讨论和Mysql交互的情况) 1)for循环调用Dao中的单条插入方法 2)传一个List<Object>参数,使用Mybatis的批量 ...
- mysql数据没有真正提交,转MySQL 批量提交优化
用户修改布局时,需要批量更新mysql的xxxx_layout_xxxx表.批量操作的数据量是2-30条/次.批量操作是这次项目在技术上比较关键的一个点,之前批量操作做过性能上的测试,mysql端问题 ...
最新文章
- 视觉惯性SLAM: VI ORB-SLAM
- jsp 内置对象 session
- CSS3 keyframes动画实现弹跳效果
- 机器学习知识点(二)各类型平均数Java实现
- append有时加载不出来_关于艾拉浏览器看漫画,有时加载慢的解决方法,你知道了吗...
- JAXB –表示空集合和空集合
- YUV格式转换RGB(基于opencv)
- 双击程序后系统弹框“您无权访问此程序”的解决办法
- iphone录屏没内部声音_6个iPhone隐藏功能,让你的手机好用到飞起
- Sicily 1029. Rabbit 解题报告
- 保持头脑清醒的窍门2/13
- scrt上传下载文件
- 智能计算系统1 环境搭建
- 使用canvas 画钟表
- oracle的同义词删不掉,oracle 删除同义词
- #199-【莫队】小Z的袜子
- 喜欢的歌,老歌居多,呵呵,怀旧,改不了的毛病
- CameraLink备忘录
- 一个人的朝圣深度感悟_朝圣之末找到更强大的WordWrap函数
- php curl如何确定数据格式正确,PHP CURL没有正确处理编码的返回数据
热门文章
- 河南科技大学计算机为什么一本二本都招生,河南科技大学是一本还是二本?什么水平?附河南科技大学录取分数线...
- 关于进程的终止和暂停
- 莱特昂-布兰朵的诗-《不正常人类症候群》
- upload-labs通关学习笔记
- LODOP中无规律无法还原偶尔出现问题排查
- IEEE EMC 办电磁产学研讨
- 给定一个链表,一次颠倒链表k的节点并返回其修改列表。如果节点的数量不是k的倍数,那末最后的剩余节点应该保持原样。
- matlab 图像 获取坐标,matlab – 获取图像内矢量的所有像素坐标
- 为什么网页设计要使用栅格化
- 举个栗子!Tableau 技巧(163):实现 年累计增长率 分析