零、传统拼接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

最新文章

  1. 到底应该选择那种Linux.NET的部署方式?
  2. angular路由
  3. HDU 4753 Fishhead’s Little Game(DFS)
  4. oracle SQL查询中间若干条记录
  5. LCA-倍增法(在线)O(nlogn)-O(logn)
  6. python基础知识10---算法
  7. ECharts基础
  8. 043 hive数据同步到mysql
  9. 【iCore1S 双核心板_ARM】例程八:ADC实验——电源监控
  10. Mycat入门核心概念
  11. Hadoop---静动态增删节点
  12. c++ boost 苹果内购 IAP验证
  13. [Android Pro] 开发一流Android SDK
  14. [ 原创 ] git使用技巧
  15. caffe杂
  16. HDU - 5493 Queue 2015 ACM/ICPC Asia Regional Hefei Online(线段树)
  17. jackrabbit官方英文文档加补充(转载)
  18. Codeforces Beta Round #56 A. Where Are My Flakes? —— 贪心
  19. http://www.cnblogs.com/Javame/p/3632473.html
  20. 基于ffmpeg和libvlc的视频剪辑、播放器

热门文章

  1. ThreadLocalMap的enrty的key为什么要设置成弱引用
  2. Lintcode: Kth Largest Element 解题报告
  3. Mac在Finder中显示/usr、/tmp、/var等隐藏目录
  4. spring InitializingBean
  5. Spring Batch并行与扩展
  6. java判断集合是否相等
  7. 一个实体对象不能由多个 IEntityChangeTracker 实例引用。
  8. 基于jQuery个性圆圈倒计时特效
  9. 基于jQuery和CSS3炫酷图片3D旋转幻灯片特效
  10. Android 开发自己的网络收音机4——读取XML文件的电台数据