现在的位置: 首页 > 综合 > 正文

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

2014年11月13日 ⁄ 综合 ⁄ 共 2693字 ⁄ 字号 评论关闭

事务控制

示例:

    // 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 );
    }

抱歉!评论已关闭.