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