JAVA,编程式事务的使用

好处:可以解决Spring AOP 声明式事务,同一个类中,方法 嵌套 事务失效 的 问题。

@Autowired
private TransactionTemplate transactionTemplate; // org.springframework.transaction.support.TransactionTemplate

// 方式一:编程式事务和业务一起处理
public TruckBrokerInvoice insertInvocieAndUpdateOrder(InvoiceApplyDTO apply, String applyBillCode) {
	List<String> ids = Arrays.asList(apply.getTruckBrokerOrderIds().split(","));
	TruckBrokerInvoice record = new TruckBrokerInvoice();
	record.setPartyId(Long.valueOf(apply.getPartyId()));
	// ....
	
	// 使用 编程式事务,可以 解决 spring aop 事务,同一个类中,方法嵌套,事务 失效的 问题
	return transactionTemplate.execute(new TransactionCallback<TruckBrokerInvoice>() {
		@Override
		public TruckBrokerInvoice doInTransaction(TransactionStatus status) {
			truckBrokerInvoiceDao.insertTruckBrokerInvoice(record);
			// 更新本次开票 运输单的   开票状态   `billStatus`:'开票状态,0=待开票,1=已申请,2=已开票,3=已撤销',
			for (String id : ids) {
				TruckBrokerOrder brokerOrder = new TruckBrokerOrder();
				brokerOrder.setTruckBrokerOrderId(Integer.valueOf(id));
				brokerOrder.setTruckBrokerInvoiceId(record.getTruckBrokerInvoiceId().intValue());
				brokerOrder.setBillStatus(TruckBrokerOrderBillStatusEnum.APPLY.getCode()); // 开票状态:已申请
				brokerOrder.setUpdateMan(apply.getUpdateMan());
				truckBrokerOrderDao.updateTruckBrokerOrder(brokerOrder);
			}
			return record;
		}
	});
}

    // 方式二:独立处理编程式事务
    public void batchInsert(List<ConfigCommodity> configCommodityList) {
        transactionTemplate.execute((TransactionCallback<Void>) status -> {
            for (ConfigCommodity commodity : configCommodityList) {
                insert(commodity); // 调用dao层进行insert处理
                // xxxxx 其他处理....
            }
            return null;
        });
    }

    public void batchInsert(Xxxx xxx) {
        transactionTemplate.execute((TransactionCallback<Void>) status -> {
            // xxxxx 业务处理....
            return null;
        });
    }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值