iBatis批处理实现(Spring环境).doc

上传人:夏** 文档编号:554989012 上传时间:2023-09-27 格式:DOC 页数:4 大小:56.01KB
返回 下载 相关 举报
iBatis批处理实现(Spring环境).doc_第1页
第1页 / 共4页
iBatis批处理实现(Spring环境).doc_第2页
第2页 / 共4页
iBatis批处理实现(Spring环境).doc_第3页
第3页 / 共4页
iBatis批处理实现(Spring环境).doc_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《iBatis批处理实现(Spring环境).doc》由会员分享,可在线阅读,更多相关《iBatis批处理实现(Spring环境).doc(4页珍藏版)》请在金锄头文库上搜索。

1、iBatis整理iBatis批处理实现(Spring环境)在Spring下怎么使用iBatis的批处理实现? 从4个层面分析这部分实现: iBatis的基本实现1 基于事务的iBatis的基本实现2 基于事务的Spring+iBatis实现3 基于回调方式的Spring+iBatis实现1.iBatis的基本实现 iBatis通过SqlMapClient提供了一组方法用于批处理实现: startBatch() 开始批处理executeBatch() 执行批处理代码如下: 1 public void create(List replyList) 2 try 3 / 开始批处理 4 sqlMapC

2、lient.startBatch(); 5 6 for (Reply reply: replyList) 7 / 插入操作 8 sqlMapClient.insert(Reply.create, reply); 9 10 / 执行批处理 11 sqlMapClient.executeBatch(); 12 13 catch (Exception e) 14 e.printStackTrace(); 15 16 1 这是基于iBatis的最基本实现,如果你一步一步debug,你会发现:其实,数据库已经执行了插入操作! 因此,除了这两个核心方法外,你还需要开启事务支持。否则,上述代码只不过是个空架

3、子! 2.基于事务的iBatis的基本实现 事务处理: startTransaction() 开始事务1 commitTransaction() 提交事务2 endTransaction() 结束事务我们以insert操作为例,把它们结合到一起: 3 public void create(List replyList) 4 try 5 / 开始事务 6 sqlMapClient.startTransaction(); 7 / 开始批处理 8 sqlMapClient.startBatch(); 9 10 for (Reply reply: replyList) 11 / 插入操作 12 sql

4、MapClient.insert(Reply.create, reply); 13 14 / 执行批处理 15 sqlMapClient.executeBatch(); 16 / 提交事务 17 sqlMapCmitTransaction(); 18 19 catch (Exception e) 20 e.printStackTrace(); 21 finally 22 try 23 / 结束事务 24 sqlMapClient.endTransaction(); 25 catch (SQLException e) 26 e.printStackTrace(); 27 28 29 replyL

5、ist是一个List,要把这个List插入到数据库,就需要经过这三个步骤: 30 开始批处理 startBatch()31 插入 insert()32 执行批处理 executeBatch()如果要在Spring+iBatis中进行批处理实现,需要注意使用同一个sqlMapClient!同时,将提交事务的工作交给Spring统一处理! 3.基于事务的Spring+iBatis实现 33 public void create(List replyList) 34 if (!CollectionUtils.isEmpty(replyList) 35 / 注意使用同一个SqlMapClient会话

6、36 SqlMapClient sqlMapClient = sqlMapClientTemplate.getSqlMapClient(); 37 38 try 39 / 开始事务 40 sqlMapClient.startTransaction(); 41 / 开始批处理 42 sqlMapClient.startBatch(); 43 for (Reply reply : replyList) 44 / 插入操作 45 sqlMapClient.insert(Reply.create, reply); 46 47 / 执行批处理 48 sqlMapClient.executeBatch()

7、; 49 / 提交事务 交给Spring统一控制 50 / sqlMapCmitTransaction(); 51 catch (Exception e) 52 e.printStackTrace(); 53 finally 54 try 55 / 结束事务 56 sqlMapClient.endTransaction(); 57 catch (SQLException e) 58 e.printStackTrace(); 59 60 61 62 注意使用同一个sqlMapClient: SqlMapClient sqlMapClient = sqlMapClientTemplate.getS

8、qlMapClient(); 如果直接sqlMapClientTemplate执行insert()方法,将会造成异常! 想想,还有什么问题?其实问题很明显,虽然解决了批处理实现的问题,却造成了事务代码入侵的新问题。 这么做,有点恶心! 除此之外,异常的处理也很恶心,不能够简单的包装为 DataAccessException 就无法被Spring当作统一的数据库操作异常做处理。 4.基于回调方式的Spring+iBatis实现 如果观察过Spring的源代码,你一定知道,Spring为了保持事务统一控制,在实现ORM框架时通常都采用了回调模式,从而避免了事务代码入侵的可能! 修改后的代码如下:

9、63 public void create(final List replyList) 64 / 执行回调 65 sqlMapClientTemplate.execute(new SqlMapClientCallback() 66 / 实现回调接口 67 public Object doInSqlMapClient(SqlMapExecutor executor) 68 throws SQLException 69 / 开始批处理 70 executor.startBatch(); 71 for (Reply reply : replyList) 72 / 插入操作 73 executor.i

10、nsert(Reply.create, reply); 74 75 / 执行批处理 76 executor.executeBatch(); 77 return null; 78 79 ); 80 注意,待遍历的参数replyList需要加入final标识!即,待遍历对象不能修改! 引用public void create(final List replyList)这样做,就将事务处理的控制权完全交给了Spring! 简述: 81 SqlMapClientCallback 回调接口82 doInSqlMapClient(SqlMapExecutor executor) 回调实现方法83 DataAccessException 最终可能抛出的异常通过上述修改,最终能够解决第三种实现方式中的种种不足!

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号