浏览 14474 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-02-27
首先在你的dao中需要继承org.springframework.orm.ibatis.support.SqlMapClientDaoSupport 然后在代码中调用getSqlMapClientTemplate方法, 覆写SqlMapClientCallback类中的doInSqlMapClient的方法 public void insertTreeCateBatch(final List<TreeCate> TreeCateList) throws DataAccessException{ this.getSqlMapClientTemplate().execute(new SqlMapClientCallback(){ public Object doInSqlMapClient(SqlMapExecutor executor) throws SQLException { executor.startBatch(); int batch = 0; for(TreeCate TreeCate:TreeCateList){ //调用获取sequence的方法。如果没有的话就去掉这行代码。 TreeCate.setTreeCateId(getNextId()); //参数1为:ibatis中需要执行的语句的id executor.insert("TreeCate_insertTreeCate", TreeCate); batch++; //每500条批量提交一次。 if(batch==500){ executor.executeBatch(); batch = 0; } } executor.executeBatch(); return null; } }); } 批量插入减少了获取数据库连接池的次数,经过测试可以提高60%到70%的性能,大家不妨在项目中使用一下。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-02-28
你的做法完全是正确的, 但是 “批量插入减少了获取数据库连接池的次数“, 这么说是误导别人的。性能的提高不是这个原因:
1。减少了499次网络交互的过程 2。数据库从500个事务, 变成了1个事务 你选择500也是一个非常合适的数据, 当然具体最多多少条数据提高最好的性能是要通过测试才能确定。 如果一次批量操作太多也是有问题的。 比如, 数据表部分缩太长时间,或者一次产生过大的redo log. 你可以继续深究一下哦。 这个才是真正的原因。 |
|
返回顶楼 | |
发表时间:2009-03-02
每次提交的条数设置肯定不是越多越好,这个和oracle有联系,需要看实际情况,我们的服务器的配置是建议200条的。我设置500条是考虑到现网上服务器的情况。这方面具体性能的测试没能做到非常详细。
|
|
返回顶楼 | |