MyBatis批量增删改的另外一种思路(推荐)
2017-07-09 16:02
309 查看
零、传统拼接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
相关文章推荐
- 解决listview层层嵌套的另外一种思路
- 推荐:Php代码不开源下的一种漏洞检测思路
- Android: 实现表情输入键盘的另外一种思路
- 除cas外的另外一种单点登录的思路
- SSH密钥和公钥对生成的另外一种办法 推荐
- Flash二进制加载图片的另外一种思路
- 控制菜单的比较麻烦的一种思路(不推荐使用),后面还有较为好点的
- 解决listview层层嵌套的另外一种思路(细节说明)
- 汉字转拼音 敏感词过滤 禁用词查找 提高程序效率另外一种思路:反向思维
- WEB安全实战(五)XSS 攻击的另外一种解决方案(推荐)
- 精品软件推荐—百度云另外一种破解限速的方式<提取资源下载地址>
- C++如何调用DLL呢,有两种,一种是静态,另外一种是动态,即通过调用windowsAPI 来加载和卸载DLL,具体思路:
- WEB安全实战XSS 攻击的另外一种解决方案(推荐)
- Delta3d 2.0中 鼠标选取物体的示例代码另外一种方法
- Base: ACID外的另外一种选择
- iOS 无缝连接滚动轮播图的一种实现思路
- 一种Web UI 的代码设计思路
- java中写构造函数的另外一种方式
- 解决ARP欺骗病毒的思路【11-17更新】 推荐
- json的另外一种写法