事务控制
示例:
// move data from temp_table to work_table try { 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 slipId void 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 slipId void 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 slipId void moveProductsToWorkTable( String slipId ) throws SQLException { assert slipId != null; T06CaseDtlTrnDAO dao = new T06CaseDtlTrnDAOImpl( sqlMapClient ); dao.insertFromT04( slipId ); } // Move datas from T03 to T05 by slipId void 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 ); }