`

ibatis 批量 事物提交

 
阅读更多

用 iabtis 

<iterate conjunction="">

 批量提交,缺点是提交数量有限制,size<1000;

批量提交: http://fengxiaoshuang429201406254717.iteye.com/blog/2392798

 

 

大量数据的话用事物提交:

我这边设置的是,一条一条insert,满5000条,事物提交;

 

如果过来一万条数据,事物会分成两批提交;

 

service impl实现层:

/** 5000条提交一次 */
    public static final int        BATCH_SIZE           = 5000;

    /** 事务模板 */
    protected TransactionTemplate transactionTemplate;

    /** sql执行模板 */
    protected SqlMapClientTemplate sqlMapClientTemplate = new SqlMapClientTemplate();
    private SqlMapClient sqlMapClient;
	
	 public SqlMapClientTemplate getSqlMapClientTemplate() {
        return sqlMapClientTemplate;
    }

    public void setSqlMapClientTemplate(SqlMapClientTemplate sqlMapClientTemplate) {
        this.sqlMapClientTemplate = sqlMapClientTemplate;
    }

    public SqlMapClient getSqlMapClient() {
        return sqlMapClient;
    }

    public void setSqlMapClient(SqlMapClient sqlMapClient) {
        this.sqlMapClient = sqlMapClient;
        this.sqlMapClientTemplate.setSqlMapClient(sqlMapClient);
    }

    public void setTransactionTemplate(TransactionTemplate transactionTemplate) {
        this.transactionTemplate = transactionTemplate;
    }
	
	
	 @Override
    public void getBankHandlingCharge(final List<PostAccountVO> vo) {

        sqlMapClientTemplate.execute(new SqlMapClientCallback() {
            public Object doInSqlMapClient(SqlMapExecutor executor) throws SQLException {
                executor.startBatch();
                int indexInBatch = 0;
                List<PostAccountInfoDO> infoDOList = new LinkedList<PostAccountInfoDO>();
                for (PostAccountVO poa : vo){
                    PostAccountInfoDO infoDO = new PostAccountInfoDO();
                    infoDO.setAmount(poa.getAmount());
                    infoDO.setFundCategory(poa.getFundCategory());
                    infoDO.setPostStaus(poa.getPostStaus());
                    infoDO.setFundChannelCode(poa.getFundChannelCode());
                    infoDO.setHappenDate(poa.getHappenDate());
                    infoDO.setRemarks(poa.getRemarks());
                    infoDO.setCreater(poa.getCreater());
                    infoDO.setCreateTime(poa.getCreateTime());
                    infoDO.setAuditor(poa.getCreater());
                    infoDO.setAuditorTime(poa.getCreateTime());
                    infoDO.setDeleteFlag(poa.getDeleteFlag());
                    infoDO.setInstOrder(poa.getInstOrder());
                    infoDOList.add(infoDO);
                }

                for (PostAccountInfoDO postAccountInfoDO:infoDOList) {
                    if (indexInBatch > BATCH_SIZE) {//5000条作为一批处理。超过5000,则作为下一批。
                        executor.executeBatch();
                        executor.startBatch();
                        indexInBatch = 0;
                    }
                    executor.insert("MS-POST-ACCOUNT-INFO-INSERT", postAccountInfoDO);

                    indexInBatch++;

            }
                return executor.executeBatch();
            }
    });
    }

 

 

insert 方法不是dao层的实现方法,是executor里边的insert方法,也就是说这里直接访问了mapping.xml文件里边 id="MS-POST-ACCOUNT-INFO-INSERT" 的方法;

 

 mapping.xml层:

<insert id="MS-POST-ACCOUNT-INFO-INSERT">
   <selectKey resultClass="java.lang.String" keyProperty="accountSeqNo">
      <![CDATA[
       select seq_post_account_info.nextval from dual
   ]]>
   </selectKey>
   <![CDATA[
       insert into TB_POST_TABLE(ACCOUNT_SEQ_NO,AMOUNT,FUND_CATEGORY,POST_STAUS,FUND_CHANNEL_CODE,HAPPEN_DATE,REMARKS,CREATER,CREATE_TIME,AUDITOR,AUDITOR_TIME,DELETE_FLAG,INST_ORDER)
       values
       ( #accountSeqNo#, #amount#, #fundCategory#, #postStaus#, #fundChannelCode#, #happenDate#, #remarks#, #creater#, #createTime#, #auditor#, #auditorTime#, #deleteFlag#, #instOrder#)
   ]]>
</insert>

 

 

 

 

 

事务提交失败回滚:

 我在事物提交前抛出异常(如下图),数据并没有添加到数据库,应该是有回滚机制在里边吧



 

 

 

 

 

 

 

 

  • 大小: 19 KB
分享到:
评论

相关推荐

    ibatis批量处理

    ### iBatis批量处理知识点详解 #### 一、iBatis基本实现 iBatis(现已更名为MyBatis)是一款优秀的持久层框架,它支持定制化SQL、存储过程及高级映射。iBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果...

    ibatis批量存储

    本文将深入探讨“ibatis批量存储”这一主题,基于给定的文件名,我们将依次解析Ibatis中的iterate标签、批处理、foreach标签以及如何在Ibatis中使用HashMap。 1. Iterate标签详解及应用: Ibatis的iterate标签主要...

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

    在Ibatis中,可以通过设置SqlSession的flushCache和useCache属性,以及使用批处理执行器ExecutorType.BATCH,来实现批量插入、更新或删除。例如,在插入1万条数据时,将这些操作放在同一个SqlSession中,而不是逐一...

    ibatis的批量插入DAO实例

    在IT行业中,数据库...总结来说,Ibatis批量插入的DAO实例主要依赖于动态SQL的`&lt;foreach&gt;`标签,以及对JDBC批处理的正确配置。理解并熟练运用这些技巧,能够帮助我们在处理大量数据时,有效地提升应用的性能和效率。

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

    SqlSession支持事务管理,包括开启、提交和回滚。 3. Mapper:Ibatis中的Mapper接口是与数据库交互的桥梁。开发者可以定义自己的Mapper接口,并在XML映射文件中配置SQL语句,这样就可以在代码中直接调用Mapper接口...

    IBatis.NET开发文档

    - 事务管理:讲解如何在iBATIS中进行事务控制,包括自动和手动提交、回滚等操作。 - 映射器接口:如何创建和使用Mapper接口,以及接口方法与XML映射文件的关联。 2. **iBATIS SQL Maps入门教程**: 入门教程通常...

    ibatis 开发指南 2004

    8. **事务管理**:讨论iBatis如何进行事务控制,包括手动和自动提交,以及事务隔离级别。 9. **插件机制**:介绍iBatis的插件功能,如何自定义插件拦截SQL执行过程,实现如日志记录、性能分析等功能。 10. **缓存...

    ibatis-2.3.

    6. **Transaction Management**: iBATIS 提供事务管理功能,允许在应用级别控制事务的开始、提交和回滚。开发者可以配置事务隔离级别和超时设置。 7. **Caching**: 为了提高性能,iBATIS 提供缓存机制,可以缓存...

    ibatis批处理.doc

    尽管Spring已经配置了事务管理,但在实际使用iBATIS批处理时,仍需要在代码中显式地开启和提交事务。这是因为iBATIS的批处理需要在一个事务内执行,才能确保所有操作作为一个整体执行。例如,下面的代码展示了如何在...

    ibatis 使用手册

    5. **事务管理**: iBatis提供了事务控制功能,开发者可以自定义事务的提交和回滚。 **iBatis开发指南** 开发指南会深入讲解如何初始化iBatis环境,包括设置配置文件、创建SqlMap文件、设计Mapper接口以及如何在...

    Ibatis.net学习和实例~

    4. **事务管理**:Ibatis.net支持事务控制,可以通过编程方式或配置文件来管理事务的开始、提交和回滚。 5. **动态SQL**:Ibatis.net允许你在SQL映射文件中编写动态SQL,根据条件改变查询的结构,这在处理复杂的...

    ibatis jar包

    2. 数据库事务管理:Ibatis提供了对数据库事务的管理,可以在业务逻辑层控制事务的提交和回滚,使得事务处理更加灵活。 3. 参数映射:Ibatis能够自动将Java对象的属性值映射到SQL语句的参数中,同样也能将查询结果...

    iBatis操作

    ### iBatis批量操作 #### 一、简介 在企业级应用开发中,数据库操作是不可或缺的一部分。为了提高效率和减少资源消耗,批量处理成为了一种常用的技术手段。本文将介绍如何利用iBatis框架进行批量添加、修改、删除...

    ibatis源码

    SimpleExecutor每次执行一个SQL语句,而BatchExecutor则将多个SQL语句批量提交,提高了效率。 4. **Statement处理**:Ibatis提供了两种Statement处理方式:PreparedStatement(预编译SQL)和Statement(普通SQL)。...

    ibatis-2 源代码

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

    ibatis源代码

    4. **SqlSessionManager**: 提供了更高级别的事务管理,可以控制多个SqlSession的提交和回滚。 5. **Executor**: 执行器,负责执行SQL并处理结果。有简单执行器、复用执行器和批处理执行器三种,分别适用于不同的...

    iBATIS实战

    7.4.2 开始、提交以及结束事务 124 7.4.3 我是否需要全局事务 124 7.5 定制事务 125 7.6 事务划界 126 7.6.1 将事务在表现层划界 128 7.6.2 将事务在持久层划界 128 7.6.3 将事务在业务逻辑层划界 128 7.7 小结 129 ...

    ibatis入门教程_ibatis入门教程_源码

    2. Executor:执行器,Ibatis的核心执行组件,根据不同的执行策略(如简单、缓存、批量)实现SQL的执行。 七、事务管理 Ibatis支持手动和自动两种事务管理方式。手动模式下,开发者需要自行开启和提交事务;自动...

    ibatis 开发指南.rar

    事务管理部分则涵盖了自动提交、手动提交和回滚等操作。映射文件的编写是关键,包括了增删查改的各种SQL语句,以及ResultMap用于将查询结果转换为Java对象。 iBatis的API使用也非常直观。SqlSession是主要的交互...

    ibatis.rar学习手册

    5. **事务管理**:讲解如何在iBatis中进行事务控制,包括手动和自动提交、回滚以及事务隔离级别等。 6. **与Spring集成**:很多项目中,iBatis常与Spring框架一起使用,这部分会讲述如何配置Spring的DataSource和...

Global site tag (gtag.js) - Google Analytics