零、传统拼接SQL语句的弊端

传统上利用Mybatis进行批量操作的方式本质来说是拼接SQL语句,然后交给底层执行,如之前博文而言。
其实这种方式是存在弊端的:
1. SQL语句可能会过长,DB的引擎可能不支持。
2. MyBatis拼接耗费资源不说还容易写错。

一、新思路

使用JDBC底层的batch进行批量操作
1. 先添加如下xml,注册一个batchSession

<!--
单独配置一个执行JDBC批量操作的session,底层等于sqlSessionFactory.openSession(ExecutorType.BATCH);
底层使用org.apache.ibatis.executor.BatchExecutor作为执行引擎
-->
<bean id="batchSqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory"/>
<constructor-arg index="1" value="BATCH"/>
</bean>
2. 使用注入
/** 注入批处理SqlSessionTemplate */
@Autowired
private SqlSessionTemplate batchSqlSessionTemplate; //这里的Transactionl一定要加,底层实现是命中SQL和Statement,必须使用的是同一个Connection
/**
* 批量 insert
* @param models
* @return
*/
@Transactional
public int batchcInsert(List<Model> models){
int result = 0;
BaseMapper<Model> modelMapper = (BaseMapper<Model>) batchSqlSessionTemplate.getMapper(mapperClass);
for (Model model:models) {
result += modelMapper.insert(model);
}
return result;
} //这里的Transactionl一定要加,底层实现是命中SQL和Statement,必须使用的是同一个Connection
/**
* 批量update
* @param models
* @return
*/
@Transactional
public int batchcUpdate(List<Model> models){
BaseMapper<Model> modelMapper = (BaseMapper<Model>) batchSqlSessionTemplate.getMapper(mapperClass);
int result = 0;
for (Model model:models) {
result += modelMapper.update(model);
}
return result;
} // 批量删除delete

MyBatis批量增删改的另外一种思路(推荐)的更多相关文章

  1. MyBatis批量增删改查操作

      前文我们介绍了MyBatis基本的增删该查操作,本文介绍批量的增删改查操作.前文地址:http://blog.csdn.net/mahoking/article/details/43673741 ...

  2. 上手spring boot项目(三)之spring boot整合mybatis进行增删改查的三种方式。

    1.引入依赖. <!--springboot的web起步依赖--><dependency> <groupId>org.springframework.boot< ...

  3. entity framework 5 批量增删改效率优化

    对于数据的批量增删改最慢的就是操作一条就提交一次事务. 以下是对增删改操作的优化测试 同样的300条数据 批量新增只提交一次事务 用时:10673.5444ms 批量新增只提交一次事务并把contex ...

  4. OracleHelper(对增删改查分页查询操作进行了面向对象的封装,对批量增删改操作的事务封装)

    公司的一个新项目使用ASP.NET MVC开发,经理让我写个OracleHelper,我从网上找了一个比较全的OracleHelper类,缺点是查询的时候返回DataSet,数据增删改要写很多代码(当 ...

  5. MYSQL冷知识——ON DUPLICATE KEY 批量增删改

    一 有个需求要批量增删改,并且是混合的,也就是仅不存在才增. 删简单,因为有个deleteStaute之类的字段,删除本质上就是就是一个修改 所以就是实现批量混合增改,然而组长说mysql不支持混合增 ...

  6. 学习MyBatis必知必会(5)~了解myBatis的作用域和生命周期并抽取工具类MyBatisUtil、mybatis执行增删改查操作

    一.了解myBatis的作用域和生命周期[错误的使用会导致非常严重的并发问题] (1)SqlSessionFactoryBuilder [ 作用:仅仅是用来创建SqlSessionFactory,作用 ...

  7. Elasticsearch学习笔记(十)批量查询mget、批量增删改bulk

    一.批量查询  mget             GET /_mget {   "docs":[       {         "_index":" ...

  8. Elasticsearch由浅入深(六)批量操作:mget批量查询、bulk批量增删改、路由原理、增删改内部原理、document查询内部原理、bulk api的奇特json格式

    mget批量查询 批量查询的好处就是一条一条的查询,比如说要查询100条数据,那么就要发送100次网络请求,这个开销还是很大的如果进行批量查询的话,查询100条数据,就只要发送1次网络请求,网络请求的 ...

  9. 从0开始完成SpringBoot+Mybatis实现增删改查

    1.准备知识: 1)需要掌握的知识: Java基础,JavaWeb开发基础,Spring基础(没有Spring的基础也可以,接触过Spring最好),ajax,Jquery,Mybatis. 2)项目 ...

随机推荐

  1. maven profile 多环境

    <profiles> <profile> <!-- 本地开发环境 --> <id>dev</id> <properties> & ...

  2. 【转】Java HotSpot(TM) 64-Bit Server VM warning: Insufficient space for shared memory file:

    使用命令:JPS #jps  报错了 $jps Java HotSpot(TM) Server VM warning: Insufficient space for shared memory fil ...

  3. Linux各个文件夹的作用~~~非常实用!!

    linux下的文件结构,看看每个文件夹都是干吗用的/bin   二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录 ...

  4. sscanf函数——强大的C语言库函数

    这个函数真的很强大,这篇随笔也将一直更新一些总结,直到涵盖大多数应用: eg1: 今天公司项目中从云端获取了一段字符串---"+CBC: 0,90,4090" 我想获取其中的数字0 ...

  5. 4. Stacked AutoEncoder(堆栈自动编码器)

    1. AutoEncoder介绍 2. Applications of AutoEncoder in NLP 3. Recursive Autoencoder(递归自动编码器) 4. Stacked ...

  6. python 基础总结1

    1.python简介特点:    是简单义学,有功能强大,高性能.面向对象,对动态输入的支持.解释性语言的本质,是大多数平台上理想的脚本语言. 简单,义学                    免费, ...

  7. [转]启动Tomcat提示:指定的服务未安装

    原文地址:http://blog.csdn.net/yilip/article/details/8066246 新下载的Tomcat7.0 解压缩完了运行tomcat7.exe屏幕一闪就没了 运行to ...

  8. [转]Oracle 语法之 OVER (PARTITION BY ..) 及开窗函数

    oracle的分析函数over 及开窗函数 一:分析函数Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是 对于每个组返回多行,而聚合函数对于每个组 ...

  9. 解决MYSQL ERROR 1045 (28000)问题

    ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)   Red Hat Enterpr ...

  10. sc58x config

    addip=set bootargs ${bootargs} ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}:eth0:off ...