`
hoorace
  • 浏览: 7004 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

spring+ibatis 批量提交数据提升性能

阅读更多
在系统中,提取数据循环计算后,每次需要有大概3000条左右的数据需要提交到数据库。以前在循环中单条插入,开始只有200条左右的数据,看不出性能上的问题,现在数据量增长了很多,所以需要对提交功能做一下优化。spring集成了ibatis的批量提交的功能,我们只要调用API就可以了
首先在你的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%的性能,大家不妨在项目中使用一下。
分享到:
评论
2 楼 hoorace 2009-03-02  
每次提交的条数设置肯定不是越多越好,这个和oracle有联系,需要看实际情况,我们的服务器的配置是建议200条的。我设置500条是考虑到现网上服务器的情况。这方面具体性能的测试没能做到非常详细。
1 楼 sdh5724 2009-02-28  
你的做法完全是正确的, 但是 “批量插入减少了获取数据库连接池的次数“, 这么说是误导别人的。性能的提高不是这个原因:
1。减少了499次网络交互的过程
2。数据库从500个事务, 变成了1个事务

你选择500也是一个非常合适的数据, 当然具体最多多少条数据提高最好的性能是要通过测试才能确定。 如果一次批量操作太多也是有问题的。 比如, 数据表部分缩太长时间,或者一次产生过大的redo log. 你可以继续深究一下哦。

这个才是真正的原因。

相关推荐

    基于Spring+Ibatis的安全线程实现

    ExecutorType.BATCH则适合批量操作,能有效减少数据库交互次数,提升多线程环境下的性能。 7. **同步锁机制**:在特定场景下,如全局唯一ID生成,可以使用synchronized关键字或者Lock接口(如ReentrantLock)来实现...

    ibatis 完美例子 一对多 批处理 事务 和 spring struts2集成

    例如,在插入1万条数据时,将这些操作放在同一个SqlSession中,而不是逐一提交,可以显著减少数据库交互次数,从而提升效率。在这个例子中,"不到2秒"完成1万条数据的插入,体现了批处理的高效性。 接下来是事务...

    ibatis批处理.doc

    iBATIS支持批处理功能,通过批处理可以减少与数据库的交互次数,从而提升性能。 在iBATIS中进行批处理主要有两种方式: 1. **Spring模式下的批处理** 在Spring框架中,iBATIS与Spring的事务管理相结合,可以方便...

    ibatis api,ibatis文档,ibatis说明文档

    1. 安装和配置:介绍如何将Ibatis集成到项目中,包括Maven或Gradle依赖、Spring整合等。 2. 映射文件和SQL语句:讲解如何编写XML映射文件,包括插入、更新、删除和查询等操作。 3. 动态SQL:Ibatis的动态SQL功能...

    iBatis操作

    此方法实现了批量插入的功能,通过`SqlMapClientTemplate`进行操作,并且每500条数据执行一次批量提交,以减少网络传输次数,提高性能。 #### 五、性能优化 批量操作相比于单条数据操作有显著的性能优势。根据实际...

    ibatis 开发指南 2004

    14. **与其他框架集成**:探讨如何将iBatis与Spring、Hibernate等其他框架集成,构建更强大的企业级应用。 这本指南对于初学者和有经验的开发者来说都是宝贵的资源,它帮助读者理解iBatis的工作原理,掌握其核心...

    ibatis-2 源代码

    iBatis支持手动和自动事务管理,开发者可以通过TransactionManager来控制事务的提交和回滚。同时,它也支持Spring的声明式事务管理。 7. **插件支持** iBatis提供插件机制,通过拦截器(Interceptor)可以在SQL...

    iBATIS_in_Action.pdf

    它可以确保数据的一致性和完整性,尤其是在进行批量操作时更为关键。 - **手动控制事务**:开发者可以在业务逻辑中显式地开启和提交/回滚事务。 - **自动管理事务**:通过配置文件或注解的方式,让iBATIS自动管理...

    iBATIS实战.pdf第二部分,就两部分。

    7. **实际开发应用**:这部分可能包括了iBATIS在实际项目中的最佳实践,如如何处理批量操作,如何优化性能,以及如何与其他框架(如Spring)集成等。 8. **案例分析**:可能会有实际的代码示例和案例研究,帮助读者...

    ibatis tutorial

    总之,iBATIS 提供了一种高效、灵活的方式来处理数据库操作,通过深入学习和实践,开发者能够更好地管理和控制数据库操作,提升项目的开发效率和质量。希望这个教程能帮助你理解和掌握iBATIS的核心技术和应用场景。

    mybatis3.1.1 jar+api

    开发者可以通过SqlSession对象控制事务的提交和回滚,也可以与Spring等框架集成,实现声明式事务管理。 6. 异常处理:MyBatis提供了一套丰富的异常体系,如`org.apache.ibatis.exceptions.PersistenceException`,...

Global site tag (gtag.js) - Google Analytics