iBatis 事务控制 与 两表操作将SQL语句写入单表

来源:互联网 发布:300271华宇软件 编辑:程序博客网 时间:2024/06/08 07:01

事务控制

示例:

    // move data from temp_table to work_tabletry {sqlMapClient.startTransaction();T03SlipWk orderForm = (T03SlipWk) session.get( "SLIP_WK" );moveOrderFormToWorkTable( orderForm.getSlipId() );moveProductsToWorkTable( orderForm.getSlipId() );deleteProductsInTempTable( orderForm.getSlipId() );deleteOrderFormInTempTable( orderForm.getSlipId() );sqlMapClient.commitTransaction();}catch( SQLException e){LOG.error( e );return ERROR;}finally{sqlMapClient.endTransaction();}// delete datas from T03 by slipIdvoid deleteOrderFormInTempTable( String slipId ) throws SQLException {assert slipId != null;T03SlipWkDAO dao = new T03SlipWkDAOImpl( sqlMapClient );T03SlipWkExample example = new T03SlipWkExample();T03SlipWkExample.Criteria criteria = example.createCriteria();criteria.andSlipIdEqualTo( slipId );dao.deleteByExample( example );}// delete datas from T04 by slipIdvoid deleteProductsInTempTable( String slipId ) throws SQLException {assert slipId != null;T04CaseDtlWkDAO dao = new T04CaseDtlWkDAOImpl( sqlMapClient );T04CaseDtlWkExample example = new T04CaseDtlWkExample();T04CaseDtlWkExample.Criteria criteria = example.createCriteria();criteria.andSlipIdEqualTo( slipId );dao.deleteByExample( example );}// Move datas from T04 to T06 by slipIdvoid moveProductsToWorkTable( String slipId ) throws SQLException {assert slipId != null;T06CaseDtlTrnDAO dao = new T06CaseDtlTrnDAOImpl( sqlMapClient );dao.insertFromT04( slipId );}// Move datas from T03 to T05 by slipIdvoid moveOrderFormToWorkTable( String slipId ) throws SQLException {assert slipId != null;T05SlipTrnDAO dao = new T05SlipTrnDAOImpl( sqlMapClient );dao.insertFromT03( slipId );//used for test transication//throw new SQLException("tttttttttttt");}

四条单独的SQL 语句操作:

moveOrderFormToWorkTable( orderForm.getSlipId() );
moveProductsToWorkTable( orderForm.getSlipId() );
deleteProductsInTempTable( orderForm.getSlipId() );
deleteOrderFormInTempTable( orderForm.getSlipId() );

要么都成功,要么都失败!实践证明,上面的事务控制成功

位置:BPP / jp.co.snjp.kddi.ht.action.CheckResultAction.checkComplete()


两表操作将SQL语句写入单表

如:moveOrderFormToWorkTable( orderForm.getSlipId() ) 就是 insert  into ...select ...

则只需要配置, insert  操作对应的表(t05_slip_trn_SqlMap.xml)。

  <!-- add by GongQiang,将数据从T03转到T05 -->  <insert id="insert_from_t03" parameterClass="java.lang.String" >     INSERT INTO T05_SLIP_TRN(SLIP_ID,                    BARCODE,                    COMP_CD1,                    COMP_NM1,                    COMP_NM2,                    COMP_NM3,                    SHP_DATE1,                    SLIP_NUM1,                    SLIP_DTL_NUM1,                    PROD_CD1,                    PROD_NM1,                    LOT1,                    SHP_VOL1,                    FUNC_ID,                    USR_ID,                    USR_GRP,                    WK_REG_DATE,                    REG_DATE,                    UPDATE)              SELECT SLIP_ID,                    BARCODE,                    COMP_CD1,                    COMP_NM1,                    COMP_NM2,                    COMP_NM3,                    SHP_DATE1,                    SLIP_NUM1,                    SLIP_DTL_NUM1,                    PROD_CD1,                    PROD_NM1,                    LOT1,                    SHP_VOL1,                    FUNC_ID,                    USR_ID,                    USR_GRP,                    REG_DATE,                    REG_DATE,                    UPDATE FROM T03_SLIP_WK WHERE SLIP_ID = #SLIP_ID:VARCHAR#  </insert>
然后再对应的 dao (T05SlipTrnDAOImpl)中添加方法:

    // add by GongQiang,将数据从T03转到T05     public void insertFromT03( String slipId ) throws SQLException{    sqlMapClient.insert("t05_slip_trn.insert_from_t03", slipId );    }







原创粉丝点击